코테 대비 python/백준

21315 완전탐색 블루트포스 ==> 다시풀기

ylab 2023. 1. 27. 21:34

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

 

21315번: 카드 섞기

마술사 영재는 카드 더미를 이용한 마술을 개발하였다. 카드들에는 1부터 N까지의 숫자가 적혀있으며 초기 상태에는 1이 맨 위에 있으며 N개의 카드가 번호 순서대로 쌓여있다. 영재는 마술을

www.acmicpc.net

from itertools import permutations
import sys

def input():
    return sys.stdin.readline().rstrip()

def shuffle(card1, card2, card3):
    card = card2 + card1 + card3
    if len(card2) > 1:
        return shuffle(card2[:len(card2)//2] + card1, card2[len(card2)//2:], card3)
    else:
        card = card2 + card1 + card3
        return card

n = int(input())
correct_cards = list(map(int,input().split()))
answer = []
orders = [i for i in range(1, 10)] + [i for i in range(1, 10)]

for perm in permutations(orders, 2):
    if 2 ** max(perm)>=n: 
        continue
    cards = [i for i in range(1, n+1)]
    for k in perm:
        card1 = []
        card2 = cards[n-(2**k):]
        card3 = cards[:n-(2**k)]
        cards = shuffle(card1, card2, card3)
    
    if cards == correct_cards:
        answer = perm
        break

print(' '.join(map(str, answer)))