백준 10813번 바로가기

백준 10813 - 공 넣기와 매우 유사한 문제. input이 모두 인자가 2개여서 더 풀어내기에 수월하다.

나의 풀이

f=lambda:map(int,input().split())
n_basket,n_round=f()
ans=[i+1 for i in range(n_basket)]
exec("i,j=f();ans[i-1],ans[j-1]=ans[j-1],ans[i-1];"*n_round)
print(*ans)

초기값에 해당하는 list를 ans 변수에 저장한 뒤에, 지정한 박스를 서로 switch 하는 과정을 구현하였다.

고수들의 풀이 참고하기!

f=lambda:map(int,input().split())
n,m=f();*b,=range(n+1)
exec("i,j=f();b[i],b[j]=b[j],b[i];"*m)
print(*b[1:])

출처

  1. *b=range(n+1)
    • *b를 이용하면 [i+1 for i in range(n_basket)] for문을 이용하지 않고도 우변의 요소가 들어있는 list를 생성 가능해서 편리하다
  2. range(n)이 아닌 range(n+1)로 지정한 이유
    • k번 상자에 k번 공이 들어가게 되도록 설정한 것 -> 직관적으로 파악 가능하다.
    • 0번 상자는 존재하지 않으므로 출력을 [1:]로 슬라이싱하여 나타내면 된다.