programmers/Lv 2

다리를 지나는 트럭 [자바]

Meluu_ 2025. 2. 4. 15:45

 

🧫 문제 분석

✔️ 출처

다리를 지나는 트럭 level 2

📖 문제

 

2번 재시도 끝에 풀은 문제다. 

 

처음 시도에는 

다리 위에 올라간 트럭이 경과한 시간을 잘 못 설계해서 계속 틀렸다. 

 

두 번째 시도는 

조건문 하나를 추가하지 않아서 틀렸었다. 4,5,6,9번 

 

다리위에 있는 트럭을 제거해야하는 경우의 수는

1. 다리에 트럭이 현재 올라갈 수 있는 트럭 최대 갯수만큼 있는 경우

2. 새로운 트럭이 올라간다 했을 때 무게 하중을 넘어가는 경우

3. 위 두 경우와는 별개로 다리의 맨 앞 트럭이 다리를 다 건너(시간이 지나) 빠져나가는 경우

 

이 세가지 경우에 대해서 트럭을 잘 빼준다면 문제없이 쉽게 풀 수 있을 것이다. 

 

나는 3번을 안해서 계속 틀렸었다..

 


🔅 문제 풀이

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        Queue<int[]> q = new LinkedList<>();
        int sumWeight = 0;
        int curTime = 0; // 현재 시간
        
        
        for (int i = 0; i < truck_weights.length; i++) {
            curTime++; // 매초가 상승
            
            while(!q.isEmpty()) {
                // 트럭이 올라갈 수 있는 최대 갯수이거나, 무게를 초과하면 
                if (q.size() == bridge_length || sumWeight + truck_weights[i] > weight || bridge_length == curTime - q.peek()[1]) {
                    int[] truck = q.poll();
                    
                    sumWeight -= truck[0]; // 맨 앞 트럭을 빼주고
                    curTime += bridge_length - (curTime - truck[1]); // 맨 앞 트럭이 빠진 시간을 현재 시간에 더함
                    
                }else {
                    break;
                }
                
            }
            
            
            // 트럭을 다리에 추가 
            q.add(new int[] {truck_weights[i], curTime});
            sumWeight += truck_weights[i];            
        }

        
        // 다리에 남은 트럭들 처리 
        while (!q.isEmpty()) {
            int[] truck = q.poll();
                    
            sumWeight -= truck[0];
            curTime += bridge_length - (curTime - truck[1]);
        }
        
        
        return curTime;
    }
}

 

다른 사람 풀이중 인기 많은 것도 이해해보고 돌려봤는데 생각보다 오래걸렸다. 

그래서 내 풀이에 만족하려한다. 

❗ 오답노트 / 필요한 지식

  1. 테스트 케이스를 잘 만드는 것도 능력
  2. 항상 예외 상황을 생각

 

'programmers > Lv 2' 카테고리의 다른 글

테이블 해시 함수 [자바]  (0) 2025.02.11
행렬 테두리 회전하기 [자바]  (0) 2025.02.11
숫자 카드 나누기 [자바]  (1) 2025.02.01
호텔 대실 [자바]  (1) 2025.02.01
마법의 엘리베이터 [자바]  (0) 2025.01.30