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. 후기
- 요세푸스 문제는 자료 구조와 큐를 이용한 풀이를 권장한다. 하지만 문제를 보고 구현을 충분히 할 수 있을거라 판단했다.
이전의 삭제된 인덱스를 저장한 후 다음 삭제될 인덱스를 계산하는 방식으로 해결하였다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 보물(1026) (0) | 2023.01.13 |
---|---|
(Python)백준 코딩테스트 연습 - 큐 2(15258) (0) | 2023.01.13 |
(Python)백준 코딩테스트 연습 - 덱(10866) (0) | 2023.01.12 |
(Python)백준 코딩테스트 연습 - 듣보잡(1764) (0) | 2023.01.12 |
(Python)백준 코딩테스트 연습 - 체스판 다시 칠하기(1018) (0) | 2023.01.10 |