
https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=java
문제 설명
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려고 함.
모든 트럭이 다리를 건너려면 최소 몇 초?
풀이
q: bridge_length 사이즈만큼의 큐(FIFO 사용) 자료구조를 생성.
sum: 다리에 올라온 트럭 무게 합
트럭 무게만큼 for 문 순회하면서,
while(true):
만약, 큐가 비어있다면(트럭이 올라올 칸 수가 남아있다면): 다음 트럭 삽입(시간+1)
그렇지 않고, 큐가 꽉 찼다면: 제일 앞에거 추출
두 경우 모두 아니라면:
(weigth < sum + truck):
q.offer(0);
answer++;(시간+1)
q.offer(truck);
sum+=truck;
answer++;(시간+1)
정답코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> q = new LinkedList<>(); // 다리: 큐
int sum = 0; // 다리에 올라온 트럭 무게 합
for(int truck: truck_weights){
while(true){
// 큐가 비었다면
if(q.isEmpty()){
q.offer(truck);
sum += truck;
answer ++;
break;
}
// 큐가 꽉 찼다면
else if(q.size()==bridge_length){
sum -= q.poll();
}
// 큐가 비어있지 않다면
else{
if(weight < sum+truck){
q.offer(0);
answer ++; // 해당 트럭 건너는 시간 추가
}
else{
q.offer(truck);
sum+= truck;
answer++;
break;
}
}
}
}
// 걸린 시간 + 마지막 트럭까지 건너는 시간
return answer+bridge_length;
}
}```