설명
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()을 써서 뒷 장부터 반복이 됐었다. 약간의 실수..
'BOJ 코딩테스트 > Silver' 카테고리의 다른 글
BOJ 11723번 : 집합 (Python/구현/Silver 5) (0) | 2024.03.12 |
---|---|
BOJ 9655번 : 돌 게임 (Python/구현, DP/Silver 5) (0) | 2024.03.10 |
BOJ 11728번 : 배열 합치기 (Python/Two-Pointer/Silver 5) (4) | 2023.11.09 |
BOJ 10814번 : 나이순 정렬 (Python/자료구조/Silver 5) (1) | 2023.10.31 |
BOJ 11722번 : 가장 긴 감소하는 부분 수열 (Python/Silver 2) (1) | 2023.10.26 |