티스토리 뷰
<풀이>
다리를 건너는 모양새가 큐의 자료구조와 닮았다고 생각하였고,
popleft()를 많이 활용하게 될 것 같아 deque를 받아와서 활용하였다.
자세한 풀이는 주석으로 달아놨다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
# [다리를 건너는 트럭]과 [대기 트럭] 둘 다 popleft()를 수행해주기 위해 deque로 변환
bridge = deque()
trucks = deque(truck_weights)
# [대기 트럭]과 현재 [다리를 건너는 트럭]이 둘다 비워지면 반복문 끝
while trucks or bridge:
# 1초 추가
answer += 1
# [다리를 건너는 트럭]이 있으면 트럭을 이동 시켜준다.
if bridge:
# 다리 끝까지 다다른 트럭을 통과시켜준다.
if bridge[0][1] == bridge_length:
bridge.popleft()
# 남은 트럭을 이동시켜 준다.
for t in bridge:
t[1] += 1
# [다리를 건너는 트럭]의 무게를 전부 합한 값
bridge_weights = sum(map(lambda x: x[0], bridge))
# [대기 트럭]이 남아있고 트럭이 들어갈 길이가 남고 다리가 다음 트럭의 무게를 감당할 수 있다면
if trucks and len(bridge) < bridge_length and bridge_weights + trucks[0] <= weight:
# 다음 트럭을 [다리를 건너는 트럭]에 추가시켜 준다.
bridge.append([trucks.popleft(), 1])
return answer
|
cs |
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) | 2020.12.14 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2020.12.14 |
[프로그래머스] 프린터 (0) | 2020.12.13 |
[프로그래머스] 기능 개발 (0) | 2020.12.11 |
[프로그래머스] 주식 가격 (0) | 2020.12.11 |
댓글