백준

1158번 /요세푸스 문제 / 파이썬/ 큐

정호나 2024. 10. 2. 11:29

Queue

import collections import deque
queue = deque()

 

 

큐 구현을 위해 deque 라이브러리 사용!

- 파이썬에서 리스트로 구현 가능하지만 시간복잡도가 높아서 비효율적

- 스택과 큐 라이브러리 장점 합침

 

queue.append() :  삽입 시 

queue.popleft() : 삭제시

queue.reverse() : 역순으로 

 

 

 

https://www.acmicpc.net/problem/1158

 

 

 

 

 

# 1~n번까지 n명의 사람
# 제거되는 순서가 요세푸스 순열

from collections import deque

queue = deque()
result = []

n, k = map(int, input().split())

# 1~n번 사람 큐 생성
for i in range(1,n+1):
    queue.append(i)

# print(queue)


while queue:
    for _ in range(k-1):
        # 왼쪽 첫번째 수 제거하고 큐에 오른쪽에 추가, k-1번 실행
        queue.append(queue.popleft())

#  왼쪽 첫번 째 숫자 queue에서 제거 후 result배열에 추가
    result.append(queue.popleft())

print(str(result).replace('[','<').replace(']','>'))

 

< > 로 출력할 때 replace 함수 사용하기

 

 

참고

 

https://velog.io/@thguss/백준-1158.-요세푸스-with.-Python-큐-문제에서-deque는-필수-별꼬리-땅땅

 

백준 1158. 요세푸스 (with. Python) - 큐 문제에서 deque()는 필수 별꼬리 땅땅

1158\. 요세푸스정말 요로코롬 생각해보다가 번뜩 떠오른 큐!! k-1개 빼놓고 다시 뒤에 붙이고, k번째를 pop()해가면 되지 않을까\~~ 아이디어는 정답!! 하지만 내 코드.. 리스트로 구현하고 바로 오류

velog.io