Blog

백준 10813: 배열의 두 공 바꾸기 (Java)

공 바꾸기 문제에서는 처음에 각 바구니에 자기 번호와 같은 공이 들어 있으니 배열도 1부터 n까지 채웁니다.

입력으로 받은 바구니 번호는 1부터 시작하고 배열 인덱스는 0부터 시작합니다. 그래서 두 번호에서 각각 1을 뺀 뒤 접근합니다. bucket[i]를 바로 덮어쓰면 원래 공 번호를 잃으므로, temp에 보관하고 두 값을 바꿉니다. 이 작업을 m번 반복한 뒤 배열에 남은 공 번호를 순서대로 출력합니다.

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;

            temp = bucket[i];
            bucket[i] = bucket[j];
            bucket[j] = temp;
        }
        for (int number : bucket) {
            bw.write(number + " ");
        }
        bw.flush();
    }
}