Adventure Time - Finn 3
본문 바로가기
코테연습/python

공주 구하기(큐 자료구조로 해결)

by hyun9_9 2026. 4. 29.

정보 왕국의 이웃 나라 외동딸 공주가 숲속의 괴물에게 잡혀갔습니다. 
정보 왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 합니다. 정보왕국의 왕은 
다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했습니다.
왕은 왕자들을 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N
번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시
계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그 
왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 
1부터 시작하여 번호를 외친다.
이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다.
1
8 2
7 3
6
5
4
예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3
을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게 된 7
번 왕자에게 공주를 구하러갑니다.
N과 K가 주어질 때 공주를 구하러 갈 왕자의 번호를 출력하는 프로그램을 작성하시오.

import sys
sys.stdin=open("input.txt","rt")
n,m = map(int,input().split())
# n = int(input())
# arr = list(map(int,input().split()))

# n = input()
# arr = [list(map(int,input().split())) for _ in range(n)]
# arr = [int(input()) for _ in range(n)]
# arr = list(input())
# print(arr)

# 그냥 풀기 
# res =0
# arr = [i+1 for i in range(n)]
# index =0
# cnt = 0

# while len(arr)>1:
#     cnt +=1
    
#     if index == len(arr):
#         index = 0
    
#     if cnt == m:
#         arr.pop(index)
#         cnt = 0
#     else:
#         index+=1


# print(arr[0])

from collections import deque

dq = deque(list(range(1,n+1)))

while dq:
    for _ in range(m-1):
        cur=dq.popleft()
        dq.append(cur)
    dq.popleft()
    if len(dq) ==1:
        print(dq[0])
        dq.popleft()

'코테연습 > python' 카테고리의 다른 글

교육과정 설계(큐)  (0) 2026.04.29
응급실 (큐)  (0) 2026.04.29
후위표기식 만들기  (0) 2026.04.28
나누어 떨어지는 숫자 배열  (0) 2026.04.28
가운데 글자 가져오기  (0) 2026.04.27