Stay Hungry Stay Foolish

BOJ 코딩테스트/Silver

BOJ 2164번 : 카드2 (Python/자료구조(큐)/Silver 4)

dev스카이 2024. 1. 30. 18:35
 

2164번: 카드2

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

www.acmicpc.net


설명

N장의 카드가 있는데, 한 장이 남을 때까지 다음과 같은 동작을 반복한다.

1. 제일 위에 있는 카드를 버린다.

2. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.

위 과정을 반복하고 나면 한 장의 카드가 남게 된다. 그 수를 구해야 한다.

 

풀이

Queue 사용

1. 큐 생성

2. 1장이 남을 때 까지 버리고, 옮기는 과정을 반복

  • 반복문에서 popleft()를 이용해 윗 장을 버린다.
  • 첫 번째 카드를 append()를 이용해 맨 뒤에 추가한다.
  • 뒤로 옮겼으므로 그 카드는 popleft()를 이용해 버린다.

3. 마지막으로 첫 번째 인덱스 값을 출력한다.

 

Solution

import sys
input = sys.stdin.readline

from collections import deque

n = int(input())
q = deque() #덱 생성
for i in range(1, n+1):
    q.append(i)

while len(q) > 1: #한 장이 남을 때까지 반복
    q.popleft() #윗 장 버리기
    q.append(q[0]) #밑으로 옮기기
    q.popleft()
print(q[0]) #남은 한 장의 카드 출력

👩‍💻 회고

처음 시도 때는 결과가 1이 출력돼서 검사했더니 pop()을 써서 뒷 장부터 반복이 됐었다. 약간의 실수..