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()을 써서 뒷 장부터 반복이 됐었다. 약간의 실수..
'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 |