Blog

백준 10811번: 양끝을 교환하며 바구니 뒤집기

백준 10811번 바구니 뒤집기는 배열에 1부터 n까지 바구니 번호를 넣고 입력으로 주어진 구간의 순서를 뒤집는 방식으로 풀었습니다.

바구니 번호 i, j에서 1을 빼 배열 인덱스로 바꿉니다. 구간의 왼쪽 끝 l과 오른쪽 끝 t의 값을 temp를 이용해 교환한 뒤 두 위치를 한 칸씩 안쪽으로 옮깁니다. l < t일 때만 반복하므로 두 위치가 만나거나 지나치면 뒤집기가 끝납니다.

풀이 코드

Java
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st;

        st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int[] bucket = new int[n];
        for (int k = 0; k < n; k++) {
            bucket[k] = k + 1;
        }

        int temp;

        for (int k = 0; k < m; k++) {
            st = new StringTokenizer(br.readLine(), " ");

            int i = Integer.parseInt(st.nextToken()) - 1;
            int j = Integer.parseInt(st.nextToken()) - 1;

            for (int l = i, t = j; l < t; l++, t--) {
                temp = bucket[l];
                bucket[l] = bucket[t];
                bucket[t] = temp;
            }

        }
        for (int number : bucket) {
            bw.write(number + " ");
        }
        bw.flush();
    }
}

subList로 구간을 다룰 수도 있을까

ArrayList의 subList를 바꾸면 원본도 바뀐다고 하니 이걸 활용할 수 있지 않을까요? 여기서는 배열의 값을 직접 교환했지만 구간을 다루는 다른 방법으로도 생각해 봤습니다.