-
[Programmers] 다리를 건너는 트럭Algorithm/Programmers 2020. 5. 30. 18:57
[Level 2] 다리를 건너는 트럭
https://programmers.co.kr/learn/courses/30/lessons/42583
- 트럭은 1초에 1만큼 움직이여, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
- solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수 완성 하세요
Solution
- waitingQ에서 대기 하는 차의 무게가 다리가 지탱할 수 있는 무게보다 작거나 같을 때 다리위 트럭을 의미하는 onBridge 리스트에 추가한다.
- while문에서는 시간을 증가하고, onBridge 리스트에 추가하면서 설정했던 트럭의 다리건너는 시간이 time과 일치하면 onBridge 리스트에서 remove해준다. 그리고 count++
소스코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import java.util.LinkedList;import java.util.Queue;class Solution {static Queue<Truck> waitingQ;static LinkedList<Truck> onBridge;static int answer;static class Truck {private int weight, exit;public Truck(int weight) {this.weight = weight;this.exit = 0;}}public static int solution(int len, int weight, int[] truck_weights) {init();for (int i = 0; i < truck_weights.length; i++) {waitingQ.offer(new Truck(truck_weights[i]));}int time = 0, weightSum = 0, count = 0;while (true) {time++;// 다리 위 트럭 시간 체크if (!onBridge.isEmpty()) {if (onBridge.getFirst().exit == time) {Truck t = onBridge.removeFirst();weightSum -= t.weight;count++;if(count == truck_weights.length)break;}}if (!waitingQ.isEmpty() && weightSum + waitingQ.peek().weight <= weight) {Truck t = waitingQ.poll();t.exit = time + len;onBridge.addLast(t);weightSum += t.weight;}}answer = time;System.out.println(answer);return answer;}public static void init() {answer = 0;onBridge = new LinkedList<>();waitingQ = new LinkedList<>();}}cs 'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 더 맵게 (0) 2020.05.31 [Programmers] 쇠막대기 (0) 2020.05.31 [Programmers] 스킬트리 (0) 2020.05.30 [Programmers] 프린터 (0) 2020.05.29 [Programmers] 주식가격 (0) 2020.05.29