개발/algorithm
[백준 11866번] 요세푸스 문제0 - python
zzi_on2
2022. 2. 13. 19:17
문제 링크
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
풀이
- 원래는 index를 계산해서 해당 index의 데이터를 배열에서 삭제해주는 식으로 접근했는데 실패
- 큐를 사용해서 풀이
1. 큐에 1번부터 N번 삽입
2. 큐에 사람이 남아있을 때까지 k번 사람을 큐에서 빼는 과정 반복
- 만약 K번째 사람이라면 answer에 추가
- k번째 사람이 아니라면 다시 큐에 삽입
from collections import deque
n, k = map(int,input().split())
q = deque([i+1 for i in range(n)])
answer =[]
while q:
for i in range(k):
x = q.popleft()
if i == k-1:
answer.append(x)
else :
q.append(x)
print("<", end ="")
for i in range(n):
if i == n-1:
print(answer[i], end=">")
else:
print(answer[i], end =", ")
- 출력 형식을 설정해 줄때 아래 코드와 같이 간결하게 구현 가능
print("<%s>" %", ".join(result))