본문 바로가기

알고리즘 코드리뷰/파이썬

3. 프로그래머스_다리를지나는트럭

코드 : https://github.com/diqksrk/AlgorithmPrac/blob/master/programmers/programmers_truck.py

 

GitHub - diqksrk/AlgorithmPrac

Contribute to diqksrk/AlgorithmPrac development by creating an account on GitHub.

github.com

 

1. from collections import deque

2. bridge = deque(0 for _ in range(bridge_length))

3. truck_weights.reverse()

4. total_weight -= bridge.popleft()

 

1. deque란 ?

deque의 개념

보통 큐(queue)는 선입선출(FIFO) 방식으로 작동한다. 반면, 양방향 큐가 있는데 그것이 바로 데크(deque)다.

즉, 앞, 뒤 양쪽 방향에서 엘리먼트(element)를 추가하거나 제거할 수 있다.

데크는 양 끝 엘리먼트의 append와 pop이 압도적으로 빠르다.

컨테이너(container)의 양끝 엘리먼트(element)에 접근하여 삽입 또는 제거를 할 경우, 일반적인 리스트(list)가 이러한 연산에 O(n)이 소요되는 데 반해, 데크(deque)는 O(1)로 접근 가능하다.

 

데크(deque)에 존재하는 메서드(method)는 대략 다음과 같다.

  • deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
  • deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
  • deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가한다.
  • deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가한다.
  • deque.remove(item): item을 데크에서 찾아 삭제한다.
  • deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽).

deque, 언제, 왜 써야 하는가?

요약하자면, 데크(deque)는 스택처럼 사용할 수도 있고, 큐 처럼 사용할 수도 있다.

시작점의 값을 넣고 빼거나, 끝 점의 값을 넣고 빼는 데 최적화된 연산 속도를 제공한다.

즉, 대부분의 경우에 데크(deque)는 리스트(list)보다 월등한 옵션이다.

데크는 특히 push/pop 연산이 빈번한 알고리즘에서 리스트보다 월등한 속도를 자랑한다.

 

2. List reverse

이 메소드는 아무런 값도 반환하지 않지만, 리스트에 있는 값의 순서를 거꾸로 뒤집습니다.

'알고리즘 코드리뷰 > 파이썬' 카테고리의 다른 글

5. 프로그래머스_더맵게  (0) 2022.05.08
1. 백준_기능개발  (0) 2022.05.08