https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
1차 시도 - Fail
모든 내려가고 올라가고를 조건을 주면서 하나하나 추가하다보니 너무 방대해지고
중간중간에 내려가고나서 pop해둔 load_truck이 날아가고 이래서 기각...
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
sum = 0 #다리에 올라가있는 총 무게
bridge = deque() #len(bridge_length)
while truck_weights or bridge:
if truck_weights:
load_truck = truck_weights.pop(0)
sum += load_truck
#무게가 덜됐으면 하나 올라감
if sum < weight:
bridge.append(load_truck) #하나 올라감
answer += 1
#무게가 다찼음 (하나 내리고 하나 올림)
while sum >= weight and bridge:
unload_truck = bridge.popleft()
sum -= unload_truck #하나 내려감
answer += 1
#길이가 다 찼음
if len(bridge) == bridge_length :
unload_truck = bridge.popleft()
sum -= unload_truck #하나 내려감
answer += 1
return answer
2차 시도
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = [0 for i in range(bridge_length)] #빈 도로는 0
while bridge:
answer += 1
bridge.pop(0) #다리에서 pop 일단 out
if truck_weights:
if sum(bridge) + truck_weights[0] <= weight: #무게가 덜되어서 올릴 수 있음
bridge.append(truck_weights.pop(0))
else: #무게초과
bridge.append(0)
print(bridge)
return answer
💡최종로직
0. 정답으로 return할거 선언
0. 0으로 도로 초기화
1. bridge가 차 있는 동안
answer++ (모든 움직임은 1초씩 차지함 )
다리 맨앞에 있는 것 pop (0을 pop한다는 건 뒤에 있는 것들이 한칸씩 앞으로 이동할 자리를 만드는 것)
truck을 다 bridge에 올렸다 해도 bridge길이 만큼 이동 시간이 걸리기때문에 다 answer++를 해줘야함
1-1. truck을 다 쓸 동안
1-1-1. bridge 총 무게 + 다음 차 무게가 weight보다 작으면 무게가 덜 되니 다리에 더 올릴 수 있음
1-1-2. 무게가 초과면 0을 append해서 한칸씩 이동하게 만듦
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] Level3_N으로 표현 (0) | 2021.08.04 |
---|---|
[프로그래머스] [Python] Level_2 H-Index (0) | 2021.08.04 |
[프로그래머스] [Python] Level2_프린터 (0) | 2021.08.03 |
[프로그래머스] [Python] Level2_기능개발 (0) | 2021.08.03 |
[프로그래머스] [Python] Level2_위장 (0) | 2021.08.02 |
댓글