# 문제
- 주소: https://www.acmicpc.net/problem/10813
- 입력 받은 번호의 바구니끼리 안에 적혀있는 공 바꾸기.
# 코드
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 관련 부분에서 틀려서 여러번 수정했다.
- 그리고 맞교환이지만 순차적으로 실행되기 때문에 바구니 안에 담긴 공을 임시로 다른 곳에 저장해 두어야하는데 이 점을 간과했다. 으... ㅠㅠ 그래도 결국 풀었다!!
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 3052번: 나머지 (0) | 2025.05.24 |
---|---|
[코딩테스트] 백준 5597번: 과제 안 내신 분..? (0) | 2025.05.22 |
[코딩테스트] 백준 10810번: 공 넣기 (0) | 2025.05.21 |
[코딩테스트 ] 백준 2562번: 최댓값 (0) | 2025.05.20 |
[코딩테스트] 백준 10818번: 최소, 최대 (0) | 2025.05.20 |