알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 요세푸스 문제(1158)

HRuler 2023. 1. 12. 17:17

1. 문제

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 사람 수, k : 건너뛸 정수
n, k = map(int, input().split())

# n_l : 사람 리스트
n_l = [i+1 for i in range(n)]

# del_stan : 이전에 삭제된 수의 인덱스
del_stan = k-1

print('<', end='')
for i in range(n-1):
#     print('del_stan :', del_stan)
    print('{}, '.format(n_l.pop(del_stan)), end='')
    del_stan = (del_stan + k - 1) % len(n_l)

print('{}>'.format(n_l[0]))

3. 후기

 - 요세푸스 문제는 자료 구조와 큐를 이용한 풀이를 권장한다. 하지만 문제를 보고 구현을 충분히 할 수 있을거라 판단했다.

 이전의 삭제된 인덱스를 저장한 후 다음 삭제될 인덱스를 계산하는 방식으로 해결하였다.