jyamethyst21 님의 블로그

백준 2164번- '카드2' (PYTHON 풀이) 본문

CODING 💻

백준 2164번- '카드2' (PYTHON 풀이)

jyamethyst21 2025. 10. 25. 00:38

문제:

이번 문제는 설명이 잘 나와있어서 굳이 추가 설명은 안해도 될 것 같다. 바로 문제 풀이로 넘어가겠다!

 

풀이:

import sys
from collections import deque

N = int(sys.stdin.readline())
q = deque()


for i in range(1, N+1):
    q.append(i)

for i in range(len(q)):
    if len(q) == 1:
        break
    q.popleft()
    q.append(q[0])
    q.popleft()
print(*q)

 

답은 위와 같다.

우선 처음에 sys, deque 안쓰고 그냥 list로 풀었는데 시간초과가 떠서 둘 다 적용시켜서 다시 풀었다. 어제 문제에서 deque가 뭔지는 설명했으니 추가 설명은 하지 않겠다. 

 

해당 카드 놀이의 규칙은 다음과 같다.  첫번째 수는 무조건 삭제, 그 다음 숫자는 맨 뒤에 추가한 뒤 삭제

이러한 규칙을 생각하면서 순서대로 코드에 적용시켜주면 위 코드처럼 나온다. 좀 더 자세하게 설명해보자면, 사용자로부터 카드 놀이할 수를 입력받고 이를 순서대로 전부 q에 넣는다. 예를 들어 5를 입력받았다면 '1,2,3,4,5' 이런 식으로 숫자가 담아질 것이다.

그 후 q의 길이가 1일 경우엔 무조건 출력을 해야하므로 종료 조건을 걸어주고, 그 외에는 앞서 말한 규칙과 같이 처음 자리 수는 삭제하고, 삭제한 뒤에 남은 숫자 중 첫번째를 끝 자리에 넣어준 뒤 옮긴 숫자는 삭제하는 코드를 짜준다.

 

역시 규칙을 알아내면 코드 쓰는 건 어려운 일이 아닌 것 같다!