본문 바로가기
코딩테스트/프로그래머스 2단계

프로그래머스 2단계 - 다리를 지나는 트럭(스택/큐)

by SICDev 2021. 9. 9.
반응형

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

 

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

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

 

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        //다리를 지나는 시간
        int sec = 0;
        
        //다리에 올라간 무게
        int bridge_weight = 0;
        
        //다리
        Queue<Integer> que = new LinkedList<>();
        
        //트럭 수 만큼 반복문 실행
        for(int truck : truck_weights){
            while(true){
                //다리가 비어잇다면 트럭 출발
                if(que.isEmpty()){
                    que.add(truck);
                    bridge_weight += truck;
                    sec++;
                    break;
                //다리가 꽉찻으면 
                }else if(que.size() == bridge_length){
                    //하나 뺀다.
                    bridge_weight -= que.poll();
                //다리에 자리가 잇으면
                }else{
                    //다리에잇는 무게와 새로 들어갈 트럭의 무게가 더 크면
                    if(bridge_weight + truck > weight){
                        //시간만 늘린다.
                        sec++;
                        //무게가 0인 트럭을 추가함으로써 다리를 채운다.
                        que.add(0);
                    }else{
                        que.add(truck);
                        sec++;
                        bridge_weight += truck;
                        break;
                    }
                }
            }
        }
        //다리의 길이 + 트럭이 지나간 시간
        return bridge_length+sec;
    }
}
반응형