요세푸스 문제 0 - 11866
문제설명
이 문제를 푸는 방법에는 여러가지가 있겠지만, deque를 이용한 방법은 시간복잡도 측면에서도 효율적입니다.
먼저 문제 설명을 간단히 해보면, 1부터 N까지의 수가 순서대로 있고, 매번 K번째 수를 제거하는 과정을 반복하여 남은 수들을 모두 출력하는 것입니다.
from collections import deque
N,K = map(int,input().split())
deq = deque([i for i in range(1,N+1)]) # 데크 안에 리스트 넣기 (이 부분 모르면 아래 링크!)
result =[]
for _ in range(N) :
deq.rotate(-K) # -K만큼 배열을 rotate
result.append(deq.pop()) # 오른쪽에 있는 배열을 pop한 것을 결과 값에 넣어준다.
print('<'+str(result)[1:-1]+'>')
이 코드를 작성하면서 사용한 파이썬 내장 모듈인 collections 모듈의 deque 클래스는 큐(Queue) 자료구조를 구현할 때 유용하게 사용되는 클래스입니다.
deque 클래스는 이 큐의 양쪽 끝에서 삽입/삭제가 모두 O(1)의 시간복잡도로 가능합니다.
이 문제를 풀면서 공부해야 할 내용은 큐 자료구조와 deque 클래스에 대한 이해입니다.
그리고 파이썬에서 deque 클래스를 활용하여 큐를 구현하는 방법에 대해서도 공부해보면 좋을 것 같습니다.
🙇
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][2805] - 나무자르기 파이썬 python (0) | 2023.04.21 |
---|---|
[백준][1003] - 피보나치 함수 python 파이썬 (2) | 2023.04.19 |
[백준][1010] - 다리놓기 python (0) | 2023.04.18 |
[백준][10845][Silver 4] - 큐 python (0) | 2023.04.16 |
[백준][1427][Silver 5] - 소트인사이드 python (0) | 2023.04.14 |