본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 공 바꾸기-파이썬

https://www.acmicpc.net/problem/10813

(브론즈 2 문제)

 

10813번: 공 바꾸기

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

www.acmicpc.net

입력

5 4
1 2
3 4
1 4
2 2

출력

3 1 4 2 5

내 코드

 

N,M=map(int,input().split())
result=[i+1 for i in range(N)]
for k in range(M):
    n,m=map(int,input().split())
    temp=result[n-1]
    result[n-1]=result[m-1]
    result[m-1]=temp
    
for j in range(N):
    print(result[j],end=" ")

풀이(생각 과정)

앞서 풀었던 공 넣기와 비슷한 문제이다. 이미 공 넣기를 분석했어서 그런지 쉽게 풀 수 있었다.

 

처음에 입력값을 2개 받는다고 하였으므로 N,M을 입력받게 구현했다.

 

문제에서 1번 바구니부터 N번 바구니까지 1부터 N이 적힌 공이 들어 있다고 했으므로 result 리스트에 공의 값들을 미리 대입했다.

 

그 후 공을 바꿀 횟수(M)만큼 반복문을 수행해서 n바구니의 공과 m바구니의 공을 바꾸게 중간 매개자인 temp를 이용해서 서로의 값을 바꾸는 과정을 진행했다.

 

마지막으로 출력값이 리스트가 아닌 값 그 자체를 요구하고 있기에 반복문을 통해서 값만 따로 출력하게 구현했다.

 

개선된 다른 풀이

N,M=map(int,input().split())
result=[i+1 for i in range(N)]
for k in range(M):
    n,m=map(int,input().split())
    result[n-1],result[m-1]=result[m-1],result[n-1]
    
for j in range(N):
    print(result[j],end=" ")

이 풀이의 경우 다른 것은 다 같지만 두 값을 바꾸는데 있어 다른 방식을 사용했다.

 

파이썬 언어는 다른 언어와 다르게 값을 바꿀때 중간 매개값(temp)를 사용하지 않고 바꿀 수 있다.

코드의 5번째 라인처럼 직관적인 형태로 서로의 값을 바꾼다고 표현할 수 있다.

 

파이썬의 변수 교환 방법을 익히는데 도움이 된 문제이다.