코딩테스트 대비/BOJ

[Baekjoon/Python] 11866번: 요세푸스 문제 0 - 효과는 굉장했다!

bluetag_boy 2021. 11. 2. 03:35
반응형
 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

알고리즘 분류

  • 구현
  • 자료 구조

 

SOLUTION

from collections import deque
import sys

N, K = map(int, sys.stdin.readline().split())
josephus = deque([i for i in range(1,N+1)]) # deque로 선언 rotate() 함수를 쓰기 위해
answer = ['<']

while True:
    josephus.rotate(-K) # 왼쪽으로 K만큼 이동 0번째 인덱스는 마지막 인덱스로 이동한다]
    if len(josephus) > 1:
        answer.append(str(josephus.pop()) + ', ')  # -K만큼 이동시켜서 K번째 사람을 제거시킨다.
    
    if len(josephus) == 1: # josephus안에 값이 1개인 경우는 > 가 붙어서 출력되어야 하므로 따로 설정
        answer.append(str(josephus.pop()) + '>')
        break

answer = ''.join(answer)
print(answer)