본문 바로가기
Coding Test/Programmers

[프로그래머스] 다리를 지나는 트럭 [JAVA(자바)]

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스>

1. 문제

  1. 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건넌다.
  2. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는 알아내야 한다.
  3. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딘다.

2. 풀이

Queue 를 이용한 문제 풀이
트럭은 다리를 대기하는 순서대로 건너기 때문에 다리를 건너는 트럭을 Queue로 나타낸다.

  1. 다리를 건너고 있는 트럭이 나갈 시간일 때
    1. Queue에서 트럭의 정보를 뺀다.
    2. 다리가 견딜수 있는 무게에서 트럭의 무게를 더한다.
  2. 다리가 견딜 수 있는 무게가 대기 트럭의 무게보다 클 때
    1. Queue에 트럭의 정보{트럭의 무게, 다리에서 나갈 시간}를 넣는다.,
    2. 다리가 견딜수 있는 무게에서 트럭의 무게를 뺀다.

3. 코드

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

        while(idx < truck_weights.length){
            if(!queue.isEmpty() && time == queue.peek()[1]){
                int[] truck = queue.poll();
                weight += truck[0];
            }
            // 다리에서 나갈 시간 = time(현재 시간) + bridge_length(경과 시간)
            if(weight >= truck_weights[idx]){
                queue.add(new int[]{truck_weights[idx], time + bridge_length});
                weight -= truck_weights[idx++];
            }

            time++;
        }
        // 마지막 트럭이 다리에서 나갈 시간 더하기
        return time + bridge_length;
    }
}


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글