python/알고리즘 문제풀이
BOJ 11866. 요세푸스 문제 0
륵기
2020. 5. 9. 19:01
728x90
반응형
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
1 | 2 | 3 | 4 | 5 | 6 | 7 |
4 | 5 | 6 | 7 | 1 | 2 | |
7 | 1 | 2 | 4 | 5 | ||
4 | 5 | 7 | 1 | |||
1 | 4 | 5 | ||||
1 | 4 | 1 | 4 | . | . | . |
4 |
위의 표를 보면 테스트케이스 입력과 출력이 어떻게 출력됬는 지 이해할 수 있을 것이다.
보통은 원형 큐의 개념으로 풀 문제이나, 나는 3번째 원소를 제거하고 앞의 원소는 다시 뒤에 붙이는,
원형 큐의 기반이 되는 기본 개념을 이용해서 풀었다.
from collections import deque
N, K = map(int, input().split())
res = []
p = deque([i for i in range(1,N+1)])
ind = K-1;
while len(p) != 1:
#index 위치 앞의 원소들 뽑아서 뒤에 다시 이어 붙인다.
for _ in range(ind):
p.append(p.popleft())
#결과 리스트에 넣기
res.append(p.popleft())
#마지막 남은 원소 넣기
res.append(p[0])
print('<', end='')
for i in res:
if i == res[-1]:
print(i,end='')
else:
print(i, end = ', ')
print('>')
#print('<'+", ".join(map(str, res))+'>')
728x90
반응형