본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스] 다리를 지나는 트럭

by weero 2020. 8. 10.

문제

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이��

programmers.co.kr

 

 

풀이

Queue에 트럭의 무게를 입력하는 방식으로 풀었다.

1. Queue<Integer> bridge

2. 다리가 비어있으면, truck 하나의 무게를 올린다.

3. 트럭이 다 지나갔으면, Queue의 크기는 다리의 길이와 같아진다.

   트럭 하나의 무게를 뺀다.

4. 다리가 비어있지 않고, 현재 무게와 트럭 하나의 무게 합이 최대하중보다 작거나 같을 때, 트럭 하나를 올린다.

5. 다리가 비어있지 않고, 무게가 초과될 때 0을 넣는다.

 

 

코드

import java.util.Queue;
import java.util.LinkedList;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        Queue<Integer> bridge = new LinkedList<>();
        
        int current_weight = 0;
        for(int truck : truck_weights)
        {
            while(true){
                if(bridge.isEmpty()){
                    bridge.offer(truck);
                    answer++;
                    current_weight+=truck;
                    break;
                }else if(bridge.size() == bridge_length){
                    current_weight-=bridge.poll();
                }else if(current_weight + truck <= weight){
                    bridge.offer(truck);
                    answer++;
                    current_weight+=truck;
                    break;
                }else{
                    bridge.offer(0);
                    answer++;
                }
            }
        }
        
        return answer + bridge_length;
    }
}