[python]BOJ 11866:ジョセフス問題0


質問する

  • https://www.acmicpc.net/problem/11866
  • ジョセフス問題の概念

  • https://youtu.be/uCsD3ZGzMgE
  • https://www.geogebra.org/m/ExvvrBbR
    のウェブサイトでジョセフス問題を視覚的に確認することができます.
  • に答える

    import sys
    
    N, K = map(int, sys.stdin.readline().split())
    
    queue = [i for i in range(1, N+1)]  # 리스트 컴프리헨션으로 1부터 N까지의 순열 생성
    Josephus = []
    
    while queue:    # 큐에 원소가 없을 때까지 반복하는 반복문
        for _ in range(K-1):
            tmp = queue.pop(0)    # 첫번째 원소를 pop하여 tmp 변수에 지정
            queue.append(tmp)  # 큐의 맨 뒤에 tmp를 append함
        dead = queue.pop(0)    # K번째에 위치한 원소를 제거하고 dead에 지정
        Josephus.append(dead)	# Josephus 리스트에 dead를 넣어줌
    
    print('<'+', '.join(map(str, Josephus))+'>')