상세 컨텐츠

본문 제목

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

알고리즘 공부

by Tabris4547 2022. 6. 7. 18:38

본문

728x90

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의 경우를 살펴보면

섞는 패턴이

4 3 1 2 5입니다.

그럼 K=1일 때는

첫번째 숫자가 4번째로.

두번째 숫자가 3번째로.

세번째 숫자가 1번재로.

네번째 숫자가 2번재로.

다섯번쨰 숫자가 5번쨰로.

이렇게 가는 식입니다.

이를 역으로 구현하는 식으로 코드를 짰습니다.

 

#백준 22858번 원상복구(small)

N,K=map(int,input().split())

result=list(map(int,input().split()))
pattern=list(map(int,input().split()))

start=result

for i in range(K):
    #N의 크기에 맞는 임시리스트 선언
    tmp=list(range(N))
    for j in range(N):
        #패턴대로 앞부터 자리를 가준다.
        go=pattern[j]
        tmp[go-1]=start[j]
    start=tmp

print(start,end=' ')

저기서 tmp에서

크기를 지정해줘야했습니다.

크기를 지정하지 않으면

크기가 0인 리스트가 되어 오류가 발생합니다.

그리고 출격할 때에는

print(start)라고 하면 리스트 전체를 출력해서

[1,4,5,3,2]

이런 식으로 출력이 됩니다.

문제에서는 각 숫자를 공백 하나 주고 출력하라고 해서

위의 형식대로 출력을 했습니다.

https://chance0523.github.io/algorithm/2021/08/26/algorithm-%EC%9B%90%EC%83%81%EB%B3%B5%EA%B5%AC-small/

 

[Python] BOJ 22858번. 원상 복구 (small)

알고리즘

chance0523.github.io

공부하실 때 도움이 될 추가 코드입니다.

이 분꺼 참고하시면서 공부에 도움이 되셨으면 좋겠네요.

728x90

관련글 더보기

댓글 영역