문제 링크
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))
'개발 > algorithm' 카테고리의 다른 글
[백준 1003번] 피보나치 함수 - python (0) | 2022.02.13 |
---|---|
[백준 15829번] Hashing - python (0) | 2022.02.13 |
[백준 10816번] 숫자 카드 2 - python (0) | 2022.02.13 |
[백준 10250번] ACM 호텔 - python (0) | 2022.02.12 |
[백준 9012번] 괄호 - python (0) | 2022.02.12 |