Algoritm/BOJ

[BOJ] 1158번: 요세푸스 문제

twoDeveloper 2022. 9. 11. 23:38

■ 문제풀이

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