현재

[Java][BaekJoon][10811] 바구니 뒤집기 (★☆☆) 본문

알고리즘/백준

[Java][BaekJoon][10811] 바구니 뒤집기 (★☆☆)

AAAge 2023. 9. 23. 10:20

<문제 의도>

배열의 값을 바꾸면서 이전값을 넣을 수 있느냐 묻는 문제이다.

 

<풀이 코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class a_BaekJoon_Java_10811_UnSolved {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
       
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
       
        int array [] = new int [N];
        // int tempArray[] = new int[N]; // tempArray 에는 array과 같은 배열순서로 값이 저장되어있다.

        for ( int x = 0 ; x < N ; x++){ //배열에 각 바구니에 맞는 숫자 집어 넣는 작업
            array[x] = x+1;
        }

       
        for ( int x = 0; x < M ; x++){
                // for (int count = 0; count < N ; count++){
                //     tempArray[count] = array[count];
                // }
                // for ( int k : tempArray){
                //         System.out.print(k+ " ");
                //     }
        // for ( int k = 0 ; k < N ; k++){
        //     System.out.print(array[k]+ " ");
        // }
               
                st = new StringTokenizer(br.readLine());
                int i = Integer.parseInt(st.nextToken());
                int j = Integer.parseInt(st.nextToken());
                // 1 이랑 4 넣었을떄 가정하면
                // 1에 4 2에 3 3 에 2 4에 1 넣는데 그 중간 과정에서 값이 사라지면 안댐
               
                for (; i < j ; i++, j--){
                   
                    int temp = array[i-1];  //
                    array [i-1] = array[j-1];
                    array [j-1] = temp;
                   
                    // i가 3, j가 4일떄 array[2](3) = array[1](1)



                }
           

        }
        for ( int k : array){
            System.out.print(k+" ");
        }
    }
}
// 5 4
// 1 2 3 4 5 / 5번까지 바구니 생성 / 4번 바구니 뒤집는 입력받음
// 1 2 3 4 5 / 1, 2번 바구니 뒤집기
// 2 1 3 4 5/ 2, 3번 바구니 뒤집기
// 2 3 1 4 5 / 1에서 4번 까지 바구니 뒤집기
// 4 1 3 2 5 /

<어려웠던점>

순서를 바꿔서 값을 넣는것까지는 쉽게 구현하였지만

그 역순으로 배열을 바꾸는데에 있어서 계속해서 오류가 났다.

가장 어려웠던 부문은 for문을 돌릴때 i는 i++로써 1씩 계속 증가하고 j값은 1씩 감소시키고 싶었는데

그 부분을 코드로 작성하는게 어려웠다. 코드를 찾아보니 for문의 마지막 조건에 for(;;a,b)를 통해서 두개의 연산자를 동시에 변경할 수 있단것을 알게 되었다.

이 부분은 아주 유용하게 사용이 가능할 것이라고 생각된다.

 

<문제출처>

https://www.acmicpc.net/problem/10811

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net