본문 바로가기
백준

[백준] 2164번 파이썬 (카드2)

by 헤이즐넛 좋아하는 개발자 2024. 2. 19.

정직하게 문제에서 알려준 것을 list로 구현하는 코드를 작성했더니 시간 초과 오류가 발생했다.

import sys
input = sys.stdin.readline

n = int(input().rstrip())

lst = [(i+1) for i in range(n)]
l = len(lst)

for _ in range(2, l):
    lst.remove(lst[0])
    num = lst[0]
    lst.remove(num)
    lst.append(num)
lst.remove(lst[0])

print(lst[0])

이후 뭔가 특별한 규칙이 있음을 유추할 수 있었고 고민해보다가 코드를 작성했다.

# n = 1 -> output = 1 = (1-0)
# n = 2 -> output = 2 = (2-1)*2
# n = 3 -> output = 2 = (3-2)*2
# n = 4 -> output = 4 = (4-2)*2
# n = 5 -> output = 2 = (5-4)*2
# n = 6 -> output = 4 = (6-4)*2
# n = 7 -> output = 6 = (7-4)*2
# n = 8 -> output = 8 = (8-4)*2
import sys
input = sys.stdin.readline

i = 1
n = int(input().rstrip())

if (n == 1):
    print(1)
else:
    while (i < n):
        i *= 2
    i = i // 2
    print((n - i) * 2)

처음에 생각했던 list 방법에서 queue 구조를 응용해서 코드를 만들어도 해결할 수 있었다. 대신 시간 초과 오류를 해결하기 위해 deque를 import해왔다.

from collections import deque
import sys
input = sys.stdin.readline

n = int(input().rstrip())

deque = deque([(i+1) for i in range(n)])
l = len(deque)

for _ in range(1, l):
    deque.popleft()
    num = deque.popleft()
    deque.append(num)

print(deque[0])