https://www.acmicpc.net/problem/10813
(브론즈 2 문제)
입력
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번째 라인처럼 직관적인 형태로 서로의 값을 바꾼다고 표현할 수 있다.
파이썬의 변수 교환 방법을 익히는데 도움이 된 문제이다.
'알고리즘 공부 > 알고리즘 구현 기초' 카테고리의 다른 글
백준) 바구니 뒤집기-파이썬 (0) | 2023.06.23 |
---|---|
백준) 과제 안 내신분...?-파이썬 (0) | 2023.06.23 |
백준) 공 넣기-파이썬 (0) | 2023.06.20 |
백준) 주사위 세개-파이썬 (2) | 2023.06.19 |
백준) 오븐 시계-파이썬 (0) | 2023.06.19 |