728x90
<문제 설명>
https://programmers.co.kr/learn/courses/30/lessons/42583
다리의 길이, 다리가 견딜수 있는 하중, 트럭의 개별 무게 가 주어진다.
다리는 1초에 한칸만 지날 수 있고, 최대 하중 초과의 무게는 올라가면 안된다.
이때 모든 트럭이 다리에서 나오려면 몇 초가 걸리는지 반환하면 된다.
입출력의 예는 다음과 같다.
bridge_length | weight | truck_weights | return |
2 | 10 | [7,4,5,6] | 8 |
100 | 100 | [10] | 101 |
100 | 100 | [10,10,10,10,10,10,10,10,10,10] | 110 |
<문제 풀이 아이디어>
먼저 한계 수용만큼 다리에 자리를 만들어주고, 0으로 채워준다.
이후 다리의 길이 동안, 다리의 자리를 하나 빼고 넣을 트럭이 남아있다면 현재 하중에 새로 들어올 트럭의 무게를 더한 값이 한계 하중 보다 작으면 0을 뺀 자리에 그 트럭을 넣고, 초과한다면 다시 0을 넣는다. 넣을 트럭이 남아있지 않다면 0을 빼주는 작업만 반복하면서 시간을 보내고, 그렇게 다리가 다 빈다면 마지막에 카운트 한 초를 반환해준다.
<문제 풀이 코드>
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = [0] * bridge_length ## 한계수용 만큼 다리에 자리를 만들어줌
while len(bridge):
answer += 1
bridge.pop(0) #넣을거 가정하고 자리 하나 뺌
if truck_weights:
if(weight - sum(bridge) >= truck_weights[0]): #무게 조건 통과하면
bridge.append(truck_weights.pop(0)) #트럭 하나 빼서 다리에 넣음
else:
bridge.append(0)#트럭 넣지 않았으므로 다시 0 넣음
return answer
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스 lv 2] 소수찾기.py (0) | 2022.02.16 |
---|---|
[자료구조] 완전탐색, 이분탐색 (0) | 2022.02.15 |
[프로그래머스 lv 2] 기능개발.py (0) | 2022.02.11 |
[프로그래머스 lv 2] 주식가격.py (0) | 2022.02.10 |
[자료구조] 스택, 큐 (0) | 2022.02.09 |