기록하는 개발자

[프로그래머스][코딩테스트 고득점 Kit][java] 다리를 지나는 트럭 본문

카테고리 없음

[프로그래머스][코딩테스트 고득점 Kit][java] 다리를 지나는 트럭

밍맹030 2023. 8. 15. 16:08
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

전체 코드

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

class Solution {    
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int totalWeight=0, index=0, totalTime=0;
        Queue<Integer> bridge = new LinkedList<>(); 

        while(true){
            // [ 마지막 트럭이 다리에 올라가면 반복문 종료 ]
            if(index==truck_weights.length) break;
            
            // [ 다리에 올라간 트럭 수 == 다리의 길이 ]
            // 다리가 꽉 찼다 => 가장 앞에 있는 트럭이 다리를 완전히 건넌다
            // => queue의 가장 위에 있는 요소를 제거한다
            if(bridge.size()==bridge_length){
                totalWeight-=bridge.poll();
            }
            
            // [ 다리에 올라가 있는 트럭의 총 무게+다음에 건널 트럭의 무게 > 다리가 버틸 수 있는 총 무게 ] 인 경우
            // 다리에 다음 트럭이 올라갈 수 없는 상태이므로 queue에 0 추가
            if(totalWeight+truck_weights[index]>weight){
                bridge.offer(0); 
            }
            // 다리에 올라가있는 트럭의 총 무게 갱신
            // 다리(큐)트럭 추가
            else{
                totalWeight+=truck_weights[index];
                bridge.offer(truck_weights[index++]);
            }
            // 총 시간 증가
            answer++;
        }
        // 마지막 트럭이 다리에 올라간 채로 반복문이 종료했으므로
        // 전체 시간에 다리 길이 더하기
        return totalTime+bridge_length;
    }
}

 

728x90