반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42583
import java.util.*;
class Solution {
Queue<Integer> bridge = new ArrayDeque<>();
int totalWeight = 0;
int totalTime = 0;
public int solution(int bridge_length, int weight, int[] truck_weights) {
for (int truckWeight : truck_weights) {
while (true) {
// 다리에 아무 트럭이 없으면 : 트럭 추가
if (bridge.isEmpty()) {
bridge.add(truckWeight);
totalWeight += truckWeight;
totalTime++;
break;
}
// 다리 길이만큼 트럭이 다 찬 경우 : 맨 앞 트럭 빼기
if (bridge.size() == bridge_length) {
totalWeight -= bridge.poll();
continue;
}
// 밑은 다리 길이만큼 트럭이 차지 않은 경우,
// 다리의 최대 하중보다 낮은 경우 : 트럭 추가
if (totalWeight + truckWeight <= weight) {
bridge.add(truckWeight);
totalWeight += truckWeight;
totalTime++;
break;
}
// 하중 초과인 경우 : 0만 넣어서 트럭 넣지 않고 시간 지남
bridge.add(0);
totalTime++;
}
}
return totalTime + bridge_length; // 마지막 트럭이 지나가는 시간 추가
}
}
다리를 지날 때 조건은 크게 하중, 트럭 수 이다. 매 초 1칸씩 이동하고, 더 이상 이동할 수 없을 때 (하중이 초과될 때) 0을 추가해서 시간이 지나도록 처리를 해주었다.
if-else 너무 깊어서 break와 continue 를 했는데 오히려 더 이해하기 어려워진 것 같기도 하고..
반응형
'알고리즘 🤔' 카테고리의 다른 글
[백준 자바 2669] 직사각형 네개의 합집합의 면적 구하기 (실버5) (0) | 2024.05.24 |
---|---|
[프로그래머스 자바] 주식가격 (Lv.2) (0) | 2024.05.23 |
[백준 자바 2179] 비슷한 단어 (골드 4) (0) | 2024.05.21 |
[프로그래머스 자바] 베스트앨범 (Lv.3) (0) | 2024.05.20 |
[프로그래머스 자바] 방문 길이 (Lv.2) (0) | 2024.04.04 |