개발 연습장/백준 문제풀이

[파이썬, Python] 백준 11866: 요세푸스 문제 0

LooanCheong 2023. 3. 14. 13:26
반응형

문제

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

코드

import sys
input = sys.stdin.readline

n, k = map(int, input().split())
first_k = k
f_list = []
a_list = []

for i in range(n):
    f_list.append(i+1)

while f_list:
    a_list.append(f_list.pop(k-1))
    if not f_list:
        break
    k += first_k-1
    while k > len(f_list):
        k -= len(f_list)

print("<", end='')
for i in range(len(a_list)-1):
        print(a_list[i], end=', ')
print(a_list[-1], end='')
print(">")

설명

우선 기존 수를 담을 리스트를 하나 만들어준다.

이후 이 리스트가 다 없어질 때까지 반복문을 진행하는데,
기존 리스트에서 k-1번째의 수를 빼서 새로운 리스트에 넣는다.
리스트의 수가 하나 줄었으므로, k는 기존의 수에서 하나를 줄여준다.(순서를 맞추기 위해)
이 과정에서 k가 만약 기존 리스트의 수보다 많다면 기존 리스트의 수만큼 줄여준다.(줄여도 위치는 동일하다)
이후 기존 리스트가 다 없어지면 반복문을 종료하고 정답을 형식에 맞게 출력한다.

반응형