큐 관련해서 쉬운 문제인데, 분명 유명한 테이블 문제인데 이름이 생각이 안난다...
무슨... 용어가 있는데 이름이 생각이 안나서 너무 괴로운 문제였다.
여튼 문제 풀이는 간단하다. 명수만큼 덱에 넣어준 뒤, while 문을 덱 안에 마지막 한
사람만이 남을 때 까지 돌려준다. 그리고 경우를 cnt로 추적하며, 이 cnt가
K의 배수가 될 때는 이를 리스트에서 삭제시키고, (popleft())
그 외 나머지 경우네는 popleft()를 해서 그대로 다시 오른쪽에 append 시키고,
이 반복문을 계속하다보면 최후의 왕자가 남게된다.
import sys
from collections import deque
#sys.stdin=open("input.txt", 'rt')
N, K = map(int, input().split())
prince = []
prince= deque(prince)
for i in range(1, N+1):
prince.append(i)
cnt = 0
while len(prince) > 1:
cnt += 1
if cnt % K == 0:
prince.popleft()
else:
prince.append(prince.popleft())
print(prince[0])
'CS > Data Structure & Algorithm' 카테고리의 다른 글
가장 큰 수 (스택) (0) | 2022.06.12 |
---|---|
역수열 (그리디 알고리즘) (0) | 2022.06.10 |
결정 알고리즘 (랜선 자르기) (0) | 2022.06.01 |
탐색 & 시뮬레이션 [수토쿠 검사] (죽음의 4중 포문...) (0) | 2022.05.31 |
한방향 연결리스트 및 연산(삽입, 삭제, 탐색) (0) | 2022.02.06 |