■ 문제풀이
k 번째 사람을 pop 시켜 ans 리스트에 추가 시킵니다. 과정에서 num이 남아있는 josephus의 리스트 보다 작다면 num의 값에 josephus 리스트 개수를 빼주며 나머지 값들 또한 순서에 맞게 ans 리스트에 추가 시킵니다.
■ 문제해답
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
josephus = []
for i in range(1, n + 1):
josephus.append(i)
ans = []
num = k - 1
while len(josephus):
if num >= len(josephus):
num = num - len(josephus)
else:
ans.append(str(josephus.pop(num)))
num = num + (k - 1)
print('<', ', '.join(ans), '>', sep = '')
■ 문제출처
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
'Algoritm > BOJ' 카테고리의 다른 글
[BOJ] 10799번: 쇠막대기 (0) | 2022.11.21 |
---|---|
[BOJ] 10845번: 큐 (0) | 2022.09.06 |
[BOJ] 1406번: 에디터 (0) | 2022.09.06 |
[BOJ] 1874번: 스택 수열 (0) | 2022.09.06 |
[BOJ] 9012번: 괄호 (0) | 2022.09.06 |