알고리즘/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="")