문제 설명
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.
예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
제한 조건
- bridge_length는 1 이상 10,000 이하입니다.
- weight는 1 이상 10,000 이하입니다.
- truck_weights의 길이는 1 이상 10,000 이하입니다.
- 모든 트럭의 무게는 1 이상 weight 이하입니다.
입출력 예
정답 풀이
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
//애초에 못지나가는 트럭도 생각해야할수도? => 다행이 그런 경우는 없음
//다리지나는 트럭 큐
//트럭정보 트럭무게 , 트럭 나갈 시간 (경과시간 + 다리 지나는 시간)
Queue<int[]> queue = new LinkedList<>();
int idx = 0;
int time = 0;
//큐에 트럭을 다 넣을 때까지
while (idx < truck_weights.length) {
//시간 지난 트럭 큐 제거
if (!queue.isEmpty() && time == queue.peek()[1]) {
int[] truck = queue.poll();
weight += truck[0]; //빠진 트럭무게만큼 허용 무게 증가
}
//허용 무게가 트럭보다 큰 경우 트럭 추가
int truck = truck_weights[idx];
if (weight >= truck) {
//트럭추가
queue.add(new int[] {truck, time + bridge_length});
//건너는 트럭무게만큼 허용 무게 차감
weight -= truck;
idx++;
}
time++;
}
//마지막 트럭은 wihle문을 안타기 때문에 다리경과시간 추가
return time + bridge_length;
}
}
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 - Java 풀이 (0) | 2023.12.18 |
---|---|
[프로그래머스] 하샤드 수 - Java 문제풀이 (0) | 2023.12.13 |
[프로그래머스] 달리기 경주 - Java(자바) 풀이 (0) | 2023.11.18 |