https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

풀이 과정

큐를 이용하여 문제를 해결할 수 있다. 양의 정수 K가 주어지면 줄의 맨 앞에 있는 사람을 K-1번만큼 뒤로 보낸 뒤 그 뒤에 맨 앞에 있는 사람을 줄에서 빼면 된다. 이것을 큐가 빌 때 까지 반복하면 요세푸스 순열이 구해진다.

 

코드

import sys
from collections import deque

N, K = map(int, sys.stdin.readline().split())
circle = deque(range(1, N+1))
answer = []

for j in range(N):
    for i in range(K-1): circle.append(circle.popleft())
    answer.append(circle.popleft())

answer = str(answer)
answer = '<' + answer[1:-1] + '>'
print(answer)

+ Recent posts