꾸준히 합시다

백준 파이썬 2164번: 카드 2 본문

코딩 테스트 문제 풀이

백준 파이썬 2164번: 카드 2

tturbo0824 2021. 3. 2. 22:42

www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

문제 유형: 자료 구조, 큐

 

# Solution 1 - 시간초과

from sys import stdin
n = int(stdin.readline())
cards = [i for i in range(1, n + 1)]
count = 1
left = []

while len(cards) != 1:
    if count%(2) == 1:
        del cards[0]
        count += 1

    else:
        cards.append(cards[0])
        del cards[0]
        count += 1
        
print(cards[0])

input()대신 sys.stdin.readline()를 사용했지만 결과는 여전히 시간 초과. 다른 접근법을 생각해보기로 했다.

 

# Solution 2

import collections

n = int(input())
cards_deque = collections.deque([i for i in range(1, n + 1)])

while len(cards_deque) != 1:
    cards_deque.popleft()
    cards_deque.rotate(-1)

print(cards_deque[0])

찾아보니 collections.deque 를 사용해야 하는 문제라고 한다. 이미 구현된 라이브러리를 통해 비교적 간단하게 작성할 수 있었다.

 

 

Comments