백준 10813: 배열의 두 공 바꾸기 (Java)
공 바꾸기 문제에서는 처음에 각 바구니에 자기 번호와 같은 공이 들어 있으니 배열도 1부터 n까지 채웁니다.
입력으로 받은 바구니 번호는 1부터 시작하고 배열 인덱스는 0부터 시작합니다. 그래서 두 번호에서 각각 1을 뺀 뒤 접근합니다. bucket[i]를 바로 덮어쓰면 원래 공 번호를 잃으므로, temp에 보관하고 두 값을 바꿉니다. 이 작업을 m번 반복한 뒤 배열에 남은 공 번호를 순서대로 출력합니다.
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();
}
}