

//백준 10813번 공 바꾸기
string[] basketNum = Console.ReadLine().Split(' ');
int N = int.Parse(basketNum[0]); //도현이 가지고 있는 총 바구니 개수
int M = int.Parse(basketNum[1]); //도현이 앞으로 공을 바꿀 횟수
int[] basket = new int[N];
//바구니에 들어가는 기본 값 할당하기
for (int index = 0; index < N; index++)
{
basket[index] = index + 1;
}
for(int index = 0; index < M; index++)
{
//변경할 바구니 번호 지정 및 할당
string[] changeNum = Console.ReadLine().Split(' ');
int i = int.Parse(changeNum[0]);
int j = int.Parse(changeNum[1]);
//값 변경
int temp;
temp = basket[i - 1];
basket[i - 1] = basket[j - 1];
basket[j - 1] = temp;
}
for(int index = 0; index < N; index++)
{
Console.Write(basket[index] + " ");
}
이전에 풀었던 ‘공 넣기’ 문제와 유사한 구조의 문제였다.
차이점은 특정 범위에 값을 덮어쓰는 방식이 아니라, 두 바구니의 값을 서로 교환하는 swap 개념을 사용한다는 점이다.
먼저 보유한 바구니의 개수(N)와 공을 교환할 횟수(M)를 입력받았다. 이후 바구니의 상태를 저장할 1차원 배열을 생성하고, 각 바구니에 1번부터 N번까지의 값을 순서대로 할당하였다.
이후 M번 반복하면서 교환할 두 바구니 번호를 입력받고, swap을 이용해 두 위치의 값을 서로 교환하였다.
구현 자체는 단순했지만, 배열이 0번 인덱스부터 시작한다는 점을 고려하여 입력값에 -1 보정을 해주는 것이 중요한 포인트였다.

구현 자체는 단순했지만, 이번 문제는 배열 인덱스 개념을 다시 점검할 수 있는 의미 있는 문제였다.
1-based numbering과 0-based indexing의 차이를 명확히 이해하는 것이 중요하며, swap 로직이 단순하더라도 인덱스 보정을 정확히 하지 않으면 전혀 다른 위치의 값이 변경될 수 있다.
'코딩 테스트 > 백준' 카테고리의 다른 글
| 백준 - [단계별로 풀어보기 1차원 배열] 3052 나머지 (0) | 2026.03.02 |
|---|---|
| 백준 - [단계별로 풀어보기 1차원 배열] 5597 과제 안 내신분? (0) | 2026.03.01 |
| 백준 - [단계별로 풀어보기 1차원 배열] 10810 공 넣기 (0) | 2026.02.26 |
| 백준 [단계별로 풀어보기 - 입출력과 사칙연산2] (0) | 2025.03.05 |
| 백준 [단계별로 풀어보기 - 입출력과 사칙연산] (0) | 2025.03.05 |