
-Code
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
// 현재 트럭을 가리키는 포인터와 현재 총 무게를 담을 변수
int idx = 0, nowWeight = 0;;
// 덱에 브릿지의 트럭들을 담기 위해 선언
Deque<Integer> deque = new ArrayDeque<>();
// 트럭이 브릿지에 다 올라가면 탈출
while(idx < truck_weights.length) {
// 브릿지가 다차면 첫 트럭은 넘어가야 하므로 poll
if (deque.size() == bridge_length) {
nowWeight -= deque.pollFirst();
}
// 다음 트럭의 무개 담기
int next = truck_weights[idx];
// 현재 무게가 가능 무게보다 작거나 같은 경우 다음 트럭 입장
if (weight >= nowWeight + next) {
// 무게 더하고 다음 트럭으로 포인터 이동
nowWeight += next;
idx++;
deque.addLast(next);
} else {
// 트럭이 못 올라가므로 0으로 트럭 1칸 앞으로 이동
deque.addLast(0);
}
// 한 싸이클마다 1초씩 증가
answer++;
}
// 마지막 트럭이 올라가고 종료이므로 다리 길이를 더해 결과 도출
return bridge_length + answer;
}
}
처음에는 트럭을 큐에 넣긴 하는데, 얘가 정확히 2초 뒤에 나갈지 3초 뒤에 나갈지를 계산하는 게 복잡했습니다. 별도의 시간을 기록하는 배열을 만들어야 하나 고민했지만 답이 나오지 않아서 힌트를 찾아보게 되었습니다.
그래서 얻은 힌트가 사이즈가 다리의 길이와 같은 경우 트럭을 넘어가게 하고 다리가 견디는 무게가 아니면 0이라는 무게를 넣어서 한칸씩 앞으로 이동하게 하는 방법을 알게된 후 해결할 수 있었습니다. 추가로 제한 무게와 현재 무게를 비교시 다음 트럭의 무게를 더한 값과 비교해야 하는데 이 부분을 간과하여 한번 더 틀렸습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 11727번 2×n 타일링 2 (0) | 2026.01.09 |
|---|---|
| [백준/Java] 1654번 랜선 자르기 (0) | 2026.01.09 |
| [백준/Java] 21617번 Crazy Fencing (0) | 2026.01.09 |
| [백준/Java] 11057번 오르막 수 (1) | 2026.01.09 |
| [백준/Java] 2193번 이친수 (0) | 2026.01.08 |