알고리즘/Python
[백준/Python] 1158번: 요세푸스 문제
_SIHA_
2022. 1. 31. 19:32
📖 문제 링크
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
👩💻 문제풀이
큐(Queue) 자료구조를 사용해야한다고 생각했는데, 막상 풀려고하니 잘 풀리지않아 블로그를 참고했다.
알고보니 간단히 리스트로도 구현이 가능했다.
인덱스를 원형으로 돌고있는것처럼 계산해주면 된다. (모듈러 연산)
또한 이 문제는 출력이 특이했다.
그냥 print("<", ">")를 하면 부등호 옆에 공백이 함께 출력된다. print문의 특징이므로 이를 처리해주어야한다.
이때 자주쓰던 end=""로는 처리가 불가능하다. '\n'를 제거하는 것이 아니기 때문이다.
따라서 sep=""을 사용하여 부등호 앞뒤의 불필요한 공백을 제거해주면 예제처럼 출력된다.
✅ 최종 코드
from collections import deque
import sys
n, k = map(int, sys.stdin.readline().split())
person = [i for i in range(1, n+1)]
index = 0
result = []
while person:
index += k-1
if index >= len(person):
index = index%len(person)
result.append(person.pop(index))
print("<", ', '.join(map(str, result)), ">", sep="")