본문 바로가기

알고리즘

[PGS] 프로그래머스 - 다리를 지나는 트럭 (JAVA)

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

 

프로그래머스

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

programmers.co.kr

import java.util.*;
import java.io.*;

class Solution {
    static Queue<Integer> bridge;
    static Queue<Integer> trucks;
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        bridge = new LinkedList<>();
        trucks = new LinkedList<>();
        int sum=0;
        
        for(int i=0;i<truck_weights.length;i++){
            trucks.add(truck_weights[i]);
        }
        
        while(!trucks.isEmpty()){
            if(bridge.isEmpty()){
                //다리가 비어있을 경우
                int tmp = trucks.poll();
                bridge.add(tmp);
                sum+=tmp;
                answer++; //다리에 오를 때만 시간 추가
            }
            else if(bridge.size()==bridge_length) {
                //다리 길이만큼 트럭이 있으면
                sum-=bridge.poll(); //보내주기
            }
            else{
                //빈 자리 있으면
                int tmp = trucks.peek();
                if(sum+tmp<=weight){
                    bridge.add(trucks.poll());
                    sum+=tmp;
                    answer++;
                }
                else{
                    bridge.add(0);
                    answer++;
                }
            }
        }
        
        return answer+bridge_length;
    }
}

1. 다리와 지나갈 트럭을 큐로 구현

2. 트럭이 다리 위에 전부 올라갈 때 까지 반복

3. 다리가 비어있으면 트럭을 올리고 answer++, sum+올라간 드럭 무게

4. 다리가 비어있지 않고, 최대 올라갈 수 있는 트럭 수보다 적게 올라가 있으면 (다리 큐 사이즈가 올라간 트럭 개수이다)

     4-1. sum에 다음에 올라갈 트럭 무게를 더해도 weight 보다 작은지 체크

     4-2. 더 작다면 다리에 올리고 answer++, sum+올라간 트럭 무게

     4-3. 올라갈 수 없으면 0을 올리고 answer++

5. 다리에 올라갈 수 있는 트럭수만큼 올라가있으면

     5-1. sum-=queue.poll (트럭 내보내고 무게도 줄임)

6. 여기까지하면 마지막 트럭이 다리에 올라타기때문에, answer에 다리 길이 더해주면 답이 된다.

 

 

거의 다 풀었는데 ..

마지막 트럭이 올라타는데까지 걸린 시간에 다리 길이를 더하면 마지막 트럭까지 지나가는 시간을 구할 수 있는 걸 생각해내지 못했다 ㅜㅜ..

단순한 방법이었는데 말이야 ... 말짱도로묵 ㅜ