-
[Java] - 다리를 지나는 트럭 (42583) (Queue)알고리즘/프로그래머스 2024. 3. 27. 11:56
📚 문제 - 42583
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5] [6] 5 [7,4] [5] [6] 6~7 [7,4,5] [6] [] 8 [7,4,5,6] [] [] 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.
제한사항- bridge_length는 1 이상 10,000 이하입니다.
- weight는 1 이상 10,000 이하입니다.
- truck_weights의 길이는 1 이상 10,000 이하입니다.
- 모든 트럭의 무게는 1 이상 weight 이하입니다.
입출력 예
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 ⌨️ 작성한 코드
import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { Queue<Integer> bridge = new LinkedList<>(); for(int i = 0; i < bridge_length; i++){ bridge.add(0); } int idx = 0; int trucksWeight = 0; int answer = 0; while(idx < truck_weights.length){ answer++; trucksWeight -= bridge.poll(); if(trucksWeight + truck_weights[idx] <= weight){ bridge.add(truck_weights[idx]); trucksWeight += truck_weights[idx]; idx++; } else { bridge.add(0); } } return bridge_length + answer; } }
- 접근방식: 큐를 생성해서 다리 위에 있는 트럭을 나타냈다. while문을 순회하면서 우선 경과 시간을 더해주고, 다리 위 트럭의 무게를 게산한다. 다리가 견딜 수 있는 무게 weight를 넘지 않으면 큐에 해당 인덱스의 트럭을 넣고, 넘으면 0을 넣어 큐의 size를 유지했다. 모든 트럭이 다리를 지나면, 지금까지의 경과시간에 다리의 길이만큼의 시간(마지막 트럭이 다리를 완전히 지나는 시간)을 더해서 return했다.
- 로직:
경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 큐 bridge idx 0 [] [] [7,4,5,6] 00 0 1~2 [] [7] [4,5,6] 07 0 3 [7] [4] [5,6] 70 0 4 [7] [4,5] [6] 04 1 5 [7,4] [5] [6] 45 2 6~7 [7,4,5] [6] [] 50 2 8 [7,4,5,6] [] [] 06 3
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] - 성격 유형 검사하기(118666) (HashMap) (0) 2024.03.29 [Java] - 주식가격 (42584) (Stack) (0) 2024.03.28 [Java] - 프로세스 (42587) (PriorityQueue) (0) 2024.03.26 [Java] - 체육복 (42862) (탐욕법(Greedy)) (0) 2024.03.25 [Java] - 대충 만든 자판 (160586) (HashMap) (0) 2024.03.25