문제
https://www.acmicpc.net/problem/2164
접근
데이터 크기: 500,000
시간 제한: 2초
반복문 안에서 리스트 insert() 메서드를 사용하거나 리스트 조작을 하면 시간이 초과될 수 있다.
큐와 스택의 성질을 사용하면 쉽게 시간에 제약을 받지 않고 구현할 수 있다.
큐와 스택의 성질을 동시에 사용이 가능한 덱(Deque)을 사용해보자.
코드
from collections import deque
N = int(input())
dq = deque(list(range(N, 0, -1)))
temp = []
while True:
if len(dq) == 1:
break
dq.pop()
dq.appendleft(dq.pop())
print(dq[0])
설명
Deque를 직접 생성할 수도 있겠지만 파이썬은 deque 모듈을 제공한다.
N부터 1까지의 deque를 생성하여 맨 윗장을 pop하고 그 다음 맨 윗 장을 pop함과 동시에 appendleft한다.
만약 덱에 원소가 하나 남으면 반복문을 탈출하고 출력한다.
알고리즘
덱(Deque)
큐(Queue)
스택(Stack)
'파이썬 > 코딩 테스트' 카테고리의 다른 글
[Do-it! 코딩 테스트-기초편] 015. 수 정렬하기 1 (0) | 2023.10.30 |
---|---|
[Do-it! 코딩 테스트-기초편] 014. 절대값 힙 구현하기 (0) | 2023.10.27 |
[Do-it! 코딩 테스트-기초편] 011. 스택으로 수열 만들기 (0) | 2023.10.26 |
[Do-it! 코딩 테스트-기초편] 010. 최소값 찾기 1 - 시간초과 (1) | 2023.10.26 |
[Do-it! 코딩 테스트-기초편] 009. DNA 비밀번호 (1) | 2023.10.26 |
댓글