문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
풀이 과정
큐를 활용하여 푼 문제
- 트럭이 한 대씩 다리에 올라가게 된다. (다리 => 큐)
- 이때 다리에 트럭이 올라갈 자리가 있다면
1-1. 그리고 해당 트럭의 무게로 다리에 올라가도 된다면,
다리에 트럭을 추가해주고, 현재 다리의 무게를 기록한다. (시간 + 1)
1-2. 트럭의 무게 때문에 다리에 올라갈 수 없다면,
0을 다리에 추가해준다. (시간 + 1) - 다리에 빈자리가 없다면, 다리의 맨 앞의 트럭을 내보낸다.
- 마지막 트럭까지 다리에 올렸다면, 여태까지의 시간 + 다리의 길이(마지막 트럭이 다리를 지나야 하므로)를 return 해준다.
코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int time = 0;
Queue<Integer> bridge = new LinkedList<>();
int bridge_weight = 0;
for (int truck : truck_weights) {
while (true) {
if (bridge.size() < bridge_length) { // 다리 꽉 차있지 않은 경우
if (bridge_weight + truck <= weight) { // 무게 때문에 트럭 올라갈 수 있는 경우
bridge.offer(truck);
bridge_weight += truck;
time++;
break;
} else { // 트럭 올라가지 못하는 경우
bridge.offer(0);
time++;
}
} else {
bridge_weight -= bridge.poll();
}
}
}
return time + bridge_length;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 단어 변환 (0) | 2022.11.10 |
---|---|
[Python] 아이템 줍기 (0) | 2022.10.02 |
[Java] 완주하지 못한 선수 (0) | 2022.10.01 |
[Java] 올바른 괄호 (0) | 2022.10.01 |
[Python] H-Index (0) | 2022.09.22 |