파이썬/예제

백준 10813번 공 바꾸기 - 스왑(swap) 사용하기

thpop 2025. 5. 19. 15:29
반응형

백준 10813번 / 공 바꾸기 : https://www.acmicpc.net/problem/10813

 

이번 문제는 N개의 바구니가 있고, 처음에는 각 바구니에 1번부터 N번까지의 번호가 순서대로 적힌 공이 하나씩 들어있는 상태에서 시작한다. 

1번 바구니에는 1번 공이, 2번 바구니에는 2번 공이,,,, N번 바구니에는 N번 공이 들어있다. 이후 M번 동안 두 바구니를 선택하여 그 안에 들어있는 공을 서로 교환하는 작업을 수행한다. 모든 작업이 끝난 후, 1번 바구니부터 N번 바구니까지 각각 어떤 공이 들어있는지 공백으로 구분하여 출력해야 한다.

 

둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 a,b로 이루어져 있으며, a번 바구니와 b번 바구니에 들어있는 공을 교환한다는 뜻이다. 

 

문제 자체가 앞서 풀어봤던 10810번 문제와 비슷하기에, 큰 어려움 없이 풀 수 있다.

 

문제를 푸는 흐름은 다음과 같다.

 

  • 바구니의 개수 N과 공을 교환하는 횟수 M을 입력받는다.
  • 크기가 N인 리스트를 만들고, 리스트에 인덱스+1인 번호의 공을 넣어 초기화한다.
  • M번 반복하면서 다음을 수행한다:
    • 공을 교환할 두 바구니의 번호 a와 b를 입력받는다.
    • 리스트 인덱스는 0부터 시작하므로, a-1번 인덱스의 바구니와 b-1번 인덱스의 바구니에 있는 공을 서로 교환한다. 이를 위해 임시 변수를 사용하여 한쪽 값을 저장해두고 교환 작업을 수행한다.
  • 모든 작업이 끝나면, 리스트의 모든 요소를 문자열로 변환하여 공백으로 구분해 한 줄에 출력한다.

내가 만든 코드는 다음과 같다.

N,M = map(int, input().split())
list = []
temp = 0

for a in range(N):
    list.append(a+1)

for b in range(M):
    i,j = map(int,input().split())
    temp = list[i-1]
    list[i-1] = list[j-1]
    list[j-1] = temp

result = ' '.join(map(str,list))
print(result)

 

 

출력 결과는 다음과 같다.

반응형