반응형
문제
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가 만약 기존 리스트의 수보다 많다면 기존 리스트의 수만큼 줄여준다.(줄여도 위치는 동일하다)
이후 기존 리스트가 다 없어지면 반복문을 종료하고 정답을 형식에 맞게 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 10866: 덱 (0) | 2023.03.16 |
---|---|
[파이썬, Python] 백준 1966: 프린터 큐 (0) | 2023.03.15 |
[파이썬, Python] 백준 2164: 카드2 (0) | 2023.03.10 |
[파이썬, Python] 백준 1874: 스택 수열 (0) | 2023.03.09 |
[파이썬, Python] 백준 4949: 균형잡힌 세상 (0) | 2023.03.08 |