본문 바로가기
Algorithm/baekjoon

[백준] 10813번 공 바꾸기 파이썬 (python)

by eoieiie 2024. 3. 10.

문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.

도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.

공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오.

 

정답코드

N, M = map(int, input().split())
basket = [0] * N

for i in range(N):
    basket[i] = i+1

for i in range(M):
    a, b = map(int, input().split()) # 1, 2

    n = basket[a - 1]
    basket[a - 1] = basket[b - 1]
    basket[b - 1] = n

for i in range(len(basket)):
    print(basket[i], end = " ")

 

 

풀이

  1. 우선 2562번을 통해 배웠던 리스트 초기화를 통해 N열짜리 리스트를 선언한다
  2. 각 요소가 0으로 초기화된 리스트의 각 요소의 값을 for문으로 지정해 준다. 
  3. M번 반복하는데, 
  4. 입력받은 a, b를 사용하여 공들의 자리이동을  인덱싱의 자리에 주의하면서 다음과  같이 구현한다:
  5. a번째 자리의 요소를 n이라는 값에 임시로 저장해준다.(a번째 자리를 다시 한번 b번째 자리에 할당해야 하기 때문에)
  6. a번째 자리에 b번째 자리의 값을 넣고
  7. b번째 자리에는 값이 변경되기 이전의 a번째 자리의 값 n을 넣어준다. 
  8. 공 자리 바꾸기 끝. 

 

 

느낀 점

역시 비슷한 문제를 많이 풀어봐야 실력이 느는구나

a = n, a = b, b = n 구조는 언제 봐도 재밌다. 단순히 교환의 법칙이 아닌, 세부적인 요소까지 고민해야 하는 게 좀 창의적인 것 같기도.. 

댓글