반응형

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

해결 방법 : Queue

  • K-1번 만큼 Q.push(Q.pop()) 반복 + 1번 Q.pop() 
    • 이 과정이 원형 테이블의 K번째 사람을 제거하는 한 번의 사이클이다.
  • until Q is empty!

 

import sys
input = sys.stdin.readline
from collections import deque

def solution(N, K):
    answer = []
    Q = deque(list(range(1, N+1)))

    while Q:
        for i in range(K-1):
            Q.append(Q.popleft())
        answer.append(Q.popleft())

    answer = ', '.join([str(i) for i in answer])
    return '<' + answer + '>'

if __name__ == '__main__':
    N, K = map(int, input().strip().split())
    result = solution(N, K)
    print(result)
반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

백준 14916 : 거스름돈  (0) 2021.06.09
백준 9934 : 완전 이진 트리  (0) 2021.06.09
백준 문제 추천 리스트!  (0) 2021.06.08
백준 5430 : AC  (0) 2021.06.07
백준 1033 : 칵테일  (0) 2021.05.29

+ Recent posts