728x90
풀이
def solution(bridge_length, weight, truck_weights):
answer = 0
truckInBridge = [] #현재 다리 위에 있는 트럭들의 남은 길이
left_weight = weight #현재 가능한 다리 무게
truck_index = 0
while(len(truck_weights) > truck_index):
time = 0
# 다리에 올릴 수 없을 때
if left_weight < truck_weights[truck_index]:
while(left_weight < truck_weights[truck_index]):
left_weight += truck_weights.pop(0)
truck_index -= 1
temp = truckInBridge.pop(0)
for i in range(len(truckInBridge)-1, -1, -1):
truckInBridge[i] -= temp
if truckInBridge[i] == 0:
truckInBridge.pop(0)
left_weight += truck_weights.pop(0)
truck_index -= 1
time += temp
# 다리에 올릴 수 없을 때
else:
time = 1
for i in range(len(truckInBridge)-1, -1, -1):
truckInBridge[i] -= time
if truckInBridge[i] == 0:
truckInBridge.pop(0)
left_weight += truck_weights.pop(0)
truck_index -= 1
left_weight -= truck_weights[truck_index]
answer += time
truckInBridge.append(bridge_length)
truck_index += 1
if len(truckInBridge) != 0:
answer += truckInBridge.pop()
return answer
내 풀이
풀긴 했는데 솔직히 좋은 풀이는 아닌 것 같다..
- 다리 위에 트럭이 더 들어갈 수 있을 때와 없을 때로 나눠서 문제를 해결했다.
- 다리 위에 있는 트럭은 truckInBridge라는 배열 안에 각 트럭 순서대로 다리 위에서 보내야 하는 시간(길이)를 할당해주고, 0이 되면 pop 했다.
- 올릴 수 없을 때는 새로운 트럭이 들어갈 수 있을 때까지 현재 다리 위에 있는 트럭을 pop 해서 공간을 만들어 준 뒤, 공간이 생기면 새로운 트럭을 다리 위로 올렸다.
- while문은 모든 트럭이 다리 위에 올라가면 멈추고, while문을 나간 뒤에 truckInBridge에서 가장 나중에 들어온 트럭이 다리를 나가기 위해 남은 시간(길이)를 answer에 더해주면 끝난다.
코드를 좀.. 단순하고 한 눈에 알아볼 수 있게 짜고싶다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩테스트 고득점 Kit / 해시] 완주하지 못한 선수 (python) (1) | 2024.01.09 |
---|---|
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 주식가격 (python) (0) | 2024.01.07 |
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 프로세스 (python) (2) | 2024.01.05 |
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 기능개발 (python) (1) | 2024.01.02 |
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 올바른 괄호 (python) (0) | 2024.01.02 |