코딩 테스트/백준

백준 - [단계별로 풀어보기 1차원 배열] 10813 공 바꾸기

devrabbit22 2026. 2. 27. 17:05

 //백준 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 numbering0-based indexing의 차이를 명확히 이해하는 것이 중요하며, swap 로직이 단순하더라도 인덱스 보정을 정확히 하지 않으면 전혀 다른 위치의 값이 변경될 수 있다.