프로그래머스
프로그래머스 lv2 - 다리를 지나는 트럭 (자바)
dragonDeok
2024. 6. 23. 14:49
728x90
문제
풀이
큐 활용
- 큐를 다리로 생각하고 트럭을 넣고 빼면서 진행
- 큐의 처음 상태를 다리 길이만큼 0을 넣고 시작해야 함 -> 큐에 있는 트럭을 맨 앞으로 이동시키기 위함
- 현재 트럭을 태울 때까지 반복문을 돌리면서 상태를 갱신함
어려웠던 점
2번째 풀이 시도 끝에 풀었던 문제이다.
순차적으로 넣고 빼는 걸 구현하는게 생각보다 조건들을 다 해결하기가 까다로웠다.
코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int time = 0;
Queue<Integer> q = new LinkedList<>(); // 다리
for (int i = 0; i < bridge_length; i++)
q.add(0);
int sum = 0; // 현재 다리에 있는 트럭 총 무게
int cnt = 0; // 현재 다리에 있는 트럭 개수
for (int w : truck_weights) {
if (w + sum > weight || cnt >= bridge_length) {
while (true) {
if (q.peek() > 0) cnt--;
sum -= q.poll();
time++;
if (w + sum <= weight && cnt < bridge_length)
break;
q.add(0);
}
} else {
if (q.peek() > 0) cnt--;
sum -= q.poll();
time++;
}
q.add(w);
sum += w;
cnt++;
}
return time + bridge_length;
}
}