알고리즘

[프로그래머스] 다리를 지나는 트럭 - Java 풀이

문제 설명

 

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 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