이전까지는 deque를 , 단순히 양쪽 pop & push가 가능한 형태로만 썼다.
이를 고급지게 활용해보자
1. deque에서의 pop
일단, from collections import deque로 선언
deq = deque()로 선언
deq.popleft() , deq.popright()로 pop(0), pop()을 변경하자.
#pop은 기본적으론 가장 오른쪽 pop임을 기억하자
2. rotate
deq.rotate(-1) # 왼쪽 회전
deq. rotate(1) # 오른쪽 회전
이러한 rotate는, 특히나 직접 컨테이너벨트나 숫자등을 구현할 때 쓰인다.
#활용 예시
백준. 20055
import sys
from collections import deque
inputlist = list(map(int,sys.stdin.readline().split()))
N = inputlist[0]
K = inputlist[1]
deq = deque(list(map(int,sys.stdin.readline().split())))
robot = deque([0] * N)
answer = 0
while True:
answer+=1
#회전
deq.rotate(1)
robot.rotate(1)
robot[-1] = 0
#2이동
if sum(robot)> 0:
for i in range(N-2,-1,-1) :
if robot[i] == 1 and robot[i+1] == 0 and deq[i+1]>=1 :
robot[i+1] = 1
robot[i] = 0
deq[i+1] -=1
robot[-1] = 0
#3
if robot[0] == 0 and deq[0] >0 :
robot[0] = 1
deq[0] -= 1
#4
if deq.count(0) >= K :
break
print(answer)
이와 같이, 경우에따라 rotate만으로 문제를 쉽게 해결할 수 있다.
--추가--
다각형 넓이 구하는 tip을 확인하자.
이전에 봤던 코딩테스트에서도, 이러한 문제들이 나온 경우가 있었다. 이 방식을 기억해놓고 잘 사용하자!
'코딩테스트' 카테고리의 다른 글
다익스트라 (0) | 2024.08.09 |
---|---|
CCW 알고리즘이란? (0) | 2024.07.08 |
HEAPQ (0) | 2024.05.23 |
백트래킹 (1) | 2024.05.17 |
조합. 문제 풀이 팁 (0) | 2024.05.10 |