본문 바로가기

프로그래머스

LV2 - 다리를 지나는 트럭 (Java)

 


 

문제

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이

너무나 queue 스러운 문제였다.

 

중요한 부분은 다리의 무게 한계점과, 각 트럭의 이동을 체크하는거였다.

 

사실 무게는 변수하나를 두고, 큐에 들어오고 나갈때 계산만하면 되었다.

 

그래서 다리에서 이동하는 트럭을 체킹하는게 문제였는데, 나는 큐에 실제로 다리를 놓는다는 방식으로 생각했다.

 

우선 큐에 다리길이만큼 -1이라는 상징적인 값을 넣는다. 

이후에 큐의 가장 앞을 빼고, 다시 새로운 값을 넣으면서 실제로 한칸씩 이동하는 식으로 구성했다.

넣고 뺄때, 현재 다리위에 있는 트럭의 무게를 계산하고, 결과에 따라서 추가적으로 트럭을 넣을지 말지를 정한다.

그리고 마지막 트럭을 넣고 난 후에는 큐에서 값을 빼기만하고 결과시간을 반환해주면 된다.

 

코드

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        Deque<Integer> deq = new ArrayDeque<>();
        int time = 0;
        int now_weight = 0;
        int cnt = 0;
        
        // bridge 길이만큼 우선 채운다.
        for(int i=0; i<bridge_length; i++){
            deq.addLast(-1);
        }
        
        // truck_weight 배열 끝까지 반복한다.
        while(cnt < truck_weights.length){
            
            int res = deq.removeFirst();
            if(res != -1){ //트럭일 경우에는 현재 무게를 감소해준다.
                now_weight -= res;
            } 
            
            int nextTarget = truck_weights[cnt];
            
            // 만약 트럭이 들어갈 수 있다면
            if(now_weight + nextTarget <= weight){
                deq.addLast(nextTarget); // 트럭을 넣어준다.
                now_weight += nextTarget; // 트럭의 무게를 더해준다.
                cnt++;
            } else{
                deq.addLast(-1); 
            }
            
            time++;
        }
        
        // 마지막 트럭만 남은 경우 빼기만 해준다.
        while(!deq.isEmpty()){
            deq.removeFirst();
            time++;
        }

        return time;
    }
}

 

후기

 

그냥 도로를 상상했다. 그러더니 그림이 그려지고 문제가 풀렸다 짠

'프로그래머스' 카테고리의 다른 글

LV2 - 마법의 엘레베이터 (Java)  (0) 2024.06.29
LV2 - 소수 찾기 (Java)  (0) 2024.06.27
LV2 - 숫자 변환하기 (Java)  (0) 2024.06.25
LV2 땅따먹기 (Java)  (1) 2023.12.21
LV2 뒤에 있는 큰 수 찾기 (Java)  (1) 2023.12.21