import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]); // 바구니 개수.
int M = Integer.parseInt(input[1]); // 몇 번 반복할지.
int[] basket = new int[N];
// 각 바구니에 같은 번호 공 담기.
for (int n = 0; n < basket.length; n++) {
basket[n] = n + 1;
}
// M번 반복하면서 2개의 바구니 안에 있는 공 맞교환 계산.
for (int i = 0; i < M; i++) {
String[] ex = br.readLine().split(" ");
int ex1 = Integer.parseInt(ex[0]) - 1; // 바구니 인덱스 구하기
int ex2 = Integer.parseInt(ex[1]) - 1; // 바구니 인덱스 구하기
int prevBasket = basket[ex1]; // ex1번 바구니 안의 공 임시 저장.
// 바구니 안에 있는 공 맞교환.
basket[ex1] = basket[ex2];
basket[ex2] = prevBasket;
}
// 각 바구니에 담긴 공이 무엇인지 계산.
for (int number : basket) {
bw.write(number + " ");
}
bw.flush();
bw.close();
br.close();
}
}
# 입/출력 결과
# 과정
BufferedReader + InputStreamReader 클래스를 사용하여 입력값 받기.
BufferedWriter + OutputStreamWriter 사용해서 출력하기.
String[] input에 입력값 받아서 공백 기준으로 나누어 저장.
int N, int M에 각각 input 값 담기.
int[] basket에 배열 길이를 N으로 생성.
for문 사용해서 각 바구니에 같은 번호의 공 초기화 작업.
: int n = 0; i < basket.length 만큼 반복.
: baskent[n] = n + 1;
: 각 바구니에 같은 번호의 값 저장. 인덱스 때문에 + 1을 작성함.
for문 사용해서 2개의 바구니 안에 있는 공 맞바꾸기.
: String[] ex에 입력 받은 값을 공백 기준으로 나누어서 저장.
: int ex1과 int ex2에 ex 요소 각각 저장. 이때 -1 해주기.(인덱스 때문에)
: basket[ex1] 과 basket[ex2] 교환하기 전에 basket[ex1] 값을 임시로 저장할 int prevBasket 생성해서 값 저장해주기.
: basket[ex1] 과 basket[ex2] 교환.
for-each문을 사용해서 basket에 있는 요소를 공백을 두고 .wirte() 사용해서 모아두기.
for-each문 밖에서 .flush()를 사용해서 출력하고 데이터 비우기.
bw와 br에 .close() 사용해서 종료해주기.
# 느낀 점
문제는 이해했으나 문제를 푸는 시간이 오래 걸렸다.
이 문제는 index를 잘 고려해서 풀어야하는 문제었다. 이 부분을 계속 인지하고 있음에도 불구하고 자꾸 index 관련 부분에서 틀려서 여러번 수정했다.
그리고 맞교환이지만 순차적으로 실행되기 때문에 바구니 안에 담긴 공을 임시로 다른 곳에 저장해 두어야하는데 이 점을 간과했다. 으... ㅠㅠ 그래도 결국 풀었다!!