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
반응형