반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

개발 쥬스

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

알고리즘

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

DevJuice 2024. 8. 13. 16:58
반응형

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

 

프로그래머스

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

programmers.co.kr

🔍 고찰 과정

트럭이 다리를 건너는 중일 때는 총 bridge_length의 시간이 걸립니다. 문제에서 대기트럭이 주어진 순서대로 이동할 때 걸리는 최소 시간을 계산하는 것이므로 Java의 Queue 자료구조를 활용하여 걸리는 시간을 계산하였습니다. 큐를 활용하여 시간 계산을 한 과정은 다음과 같습니다.

1️⃣ 트럭의 무게 정보를 담을 정수형 큐를 만들어준다.
2️⃣ 큐 자료구조에 처음에는 트럭이 없으므로 bridge_length 길이만큼의 0을 넣어준다.
3️⃣ bridge_length 만큼의 길이의 큐를 만든 이유는 시간 계산을 하기 위함이다.
4️⃣ 큐에 있는 0을 하나 빼주고 truck_weights의 배열 안에 있는 트럭의 무게 정보를 큐 자료구조에 넣을 때 총 무게가 weight 이하가 성립되면 넣어준다.
5️⃣ truck_weights의 무게 정보를 전부 돌아보지 않았고, 큐에 트럭이 들어갈 수 없는 상태라면 빈 자리를 0으로 채워줘서 시간을 계속 계산한다.
6️⃣ truck_weights의 정보를 전부 돌아보았으면 큐에 0을 보충해주지 말고 큐를 비우기만 한다.

 

 


✏️ 코드

import java.util.ArrayDeque;
import java.util.Queue;

class Solution {
    
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        int currentWeight = 0;
        int curIdx = 0;
        int len = truck_weights.length;
        Queue<Integer> q = new ArrayDeque<>();
        
        for (int i = 0; i < bridge_length; ++i) {
            q.offer(0);
        }
        
        while (!q.isEmpty()) {
            currentWeight -= q.poll();
            ++answer;
            
            if (curIdx < len) {
                if (truck_weights[curIdx] + currentWeight <= weight) {
                    q.offer(truck_weights[curIdx]);
                    currentWeight += truck_weights[curIdx++];
                    continue;
                }
                
                q.offer(0);
            }
        }
        
        return answer;
    }
}
반응형