코딩 테스트

(Java) 프로그래머스 다리를 지나는 트럭

로승리 2022. 1. 23. 05:42

문제를 보자마자 큐를 이용해야 한다는 느낌이 왔다.

다만 실제 코드 작성은 쉽게 되지 않았다.

특히 까다로웠던 부분은 다리 위 트럭 무게 총합 + 다음 올라와야 하는 트럭 무게가 다리 하중보다 큰 경우였는데

이때 가장 먼저 올라갔던 트럭이 내려와야 하므로 대기하는 시간을 추가하는 부분이었다.

이 부분을 고려하지 못해서 계속 실패하다 검색을 통해 힌트를 얻어 해결했다.


최종 코드

import java.util.LinkedList;
import java.util.Queue;
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        Queue<Integer> queue = new LinkedList<>();

        // 다리 위 트럭 무게 총합
        int temp = 0;
        int i = 0;

        // 모든 트럭이 다리 위에 올라가도록 계속 반복
        while (true) {
            // 마지막 트럭이 다리에 올라가면
            if(i == truck_weights.length) {
                break;
            }
            // 트럭이 다리 끝에 도달하면 하면 다리 위 트럭 무게에서 빼기
            if(queue.size() == bridge_length) {
                temp -= queue.poll();
            }
            // 다리 위 트럭 무게 총합 + 다음 올라와야 하는 트럭 무게가 다리 하중보다 크면
            else if(temp + truck_weights[i] > weight) {
                // 먼저 올라간 트럭이 내려와야 하므로 0을 추가하고 1초 대기
                queue.add(0);
                answer++;
            }
            else {
                queue.add(truck_weights[i]);
                temp += truck_weights[i];
                i++;
                answer++;
            }
        }

        // 마지막 트럭이 다리위에 올라간 상태에서 다리 길이를 더하기
        answer = answer + bridge_length;
        return answer;
    }
}