Skip to content
CatBus
Go back

[BOJ] 카드 섞기 - 1091 (G4)

시간 제한메모리 제한
2 초128 MB

문제

카드 N장이 있다. 각 카드는 플레이어 0, 1, 2 중 한 사람에게 나눠줘야 한다. 카드를 섞는 방법 S가 주어진다. 카드를 섞을 때마다 i번째 위치에 있던 카드가 S[i] 위치로 이동한다.

목표는 카드를 정확히 나눠주는 것이다. 최소 몇 번 섞어야 하는지 구하는 프로그램을 작성하시오.

풀이

시뮬레이션 문제이다. 카드를 섞다가 원래 상태로 돌아오면 불가능한 것이다.

코드

N = int(input())

P = list(map(int, input().split()))
S = list(map(int, input().split()))

def shuffle_card(cards, S):
    new_cards = [0] * (N)
    for i, n_i in enumerate(S):
        new_cards[n_i] = cards[i]
    return new_cards

cards = P[:]
answer = [0, 1, 2] * (N // 3)
cnt = 0

while answer != cards:
    cards = shuffle_card(cards, S)
    cnt += 1

    if cards == P:
        print(-1)
        break

else:
    print(cnt)

시간 복잡도

O(N^2)


Share this post:

비슷한 글

1091이 글

본문을 Xenova/multilingual-e5-small 로 임베딩하고, 그 벡터를 PCA 로 32축에 눌러 왼쪽 막대로 그렸습니다. 비슷한 글은 지문도 닮습니다 — 위아래를 견줘 보세요. 계산은 빌드 때 끝나고 벡터는 브라우저로 오지 않습니다.

Previous Post
[BOJ] ZOAC - 16719 (G5)
Next Post
[BOJ] 출근 - 13903 (S1)