본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 22858번 원상 복구(small)(python)

by 윤무무 2023. 4. 22.

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

 

22858번: 원상 복구 (small)

수가 적혀있는 $P_1, P_2, ..., P_N$ $N$개의 카드가 있다. 1부터 N까지 수가 하나씩 존재하는 $D_1, D_2, ... , D_i , ... D_N$ 가 있다. 이때 $D_i$는 $P_{D_i}$ 값을 $i$ 번째로 가지고 오는 것을 의미한다. 이러한

www.acmicpc.net

 

1. 난이도 실버3

 

2. 내가 작성한 코드
n, k = map(int, input().split())
end = list(map(int, input().split()))
d = list(map(int, input().split()))

for i in range(k):
    middle = [0 for _ in range(n)]
    for j in range(len(d)):
        middle[d[j]-1] = end[j]
    end = middle

for i in middle: #최종 출력
    print(i, end=" ")

 

1. 중간 결과(카드를 섞기 전의 배치)를 저장하기 위해 middle이라는 배열을 선언한다.

 

2. 내 코드 기준 최종 결과에서 j번에 있던 카드들은 d[j]가 가르키는 자리에 있던 카드들이기 때문에 middle[d[j]]번에 저장시켜준다. (인덱스 값을 맞춰주기 위해서 d[j] - 1을 해줬다)

 

3. 2번 과정을 한 번 돌릴 때마다 end를 middle로 갱신한다. => k-1번 섞은 후 카드의 배치가 됨

 

4. 2,3과정을 k번 반복해 주면 완성이다. 

댓글