본문 바로가기

개발/algorithm

[백준 11866번] 요세푸스 문제0 - python

문제 링크

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))