공부하기/백준

[Python] 백준 풀기 11866 - 요세푸스 문제 0

XEV 2022. 9. 19. 21:40

파이썬 백준 11866번

실버5

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 

 

 

문제 보기

 

 

 

문제 풀기

초기 숫자열을 K 만큼 for loop 을 돌리면서 K 전까지는 이동을 위한 if 문,

K 에 도달했을때 그 수를 제거 및 josephus_seq = deque() 에 추가를 위한 elif 문을 사용하는 규칙을 갖는 함수 작성.

 

숫자열의 개수가 0 이 될때까지 while loop 을 돌리는데 fnRule 함수를 반복 실행함.

 

출력 답안의 포맷을 맞추기 위한 for 문 작성.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

from collections import deque

N, K = map(int, inputdata().split())

nums_seq = deque([i for i in range(1, N + 1)])
josephus_seq = deque()

print(f'initial sequence: {nums_seq}')      #

def fnRule():
    for i in range(1, K + 1):
        if i != K:
            move_num = nums_seq.popleft()
            nums_seq.append(move_num)
            print(nums_seq)                 #
        elif i == K:
            save_num = nums_seq.popleft()
            josephus_seq.append(save_num)
            print(nums_seq)                 #
        print(i)                            #

while len(nums_seq) > 0:
    fnRule()

# To match the output answer format
print('<', end='')
for j in josephus_seq:
    if j != josephus_seq[-1]:
        print(j, end='')
        print(', ', end='')
    elif j == josephus_seq[-1]:
        print(j, end='')
print('>')



# 7 3

# initial sequence: deque([1, 2, 3, 4, 5, 6, 7])
# deque([2, 3, 4, 5, 6, 7, 1])
# 1
# deque([3, 4, 5, 6, 7, 1, 2])
# 2
# deque([4, 5, 6, 7, 1, 2])
# 3
# deque([5, 6, 7, 1, 2, 4])
# 1
# deque([6, 7, 1, 2, 4, 5])
# 2
# deque([7, 1, 2, 4, 5])
# 3
# deque([1, 2, 4, 5, 7])
# 1
# deque([2, 4, 5, 7, 1])
# 2
# deque([4, 5, 7, 1])
# 3
# deque([5, 7, 1, 4])
# 1
# deque([7, 1, 4, 5])
# 2
# deque([1, 4, 5])
# 3
# deque([4, 5, 1])
# 1
# deque([5, 1, 4])
# 2
# deque([1, 4])
# 3
# deque([4, 1])
# 1
# deque([1, 4])
# 2
# deque([4])
# 3
# deque([4])
# 1
# deque([4])
# 2
# deque([])
# 3
# <3, 6, 2, 7, 5, 1, 4>