Algorithm/programmers

[프로그래머스] 다리를 지나는 트럭 (자바/java)

jini_11 2021. 5. 19. 17:12
728x90


이번에도 큐를 이용하는 문제이다.

 

풀이

 

문제에서 "다리를 건너는 트럭" 이 부분을 큐로 구현한다. 즉, 문제에서 다리=큐

 

그러면 다리의 길이(length)는 큐의 크기(queue.size())와 같은 의미가 되는 것

 

그리고 weight는 임의의 변수 max를 만들어 판별할 수 있게끔 한다.

 

1. 다리가 비어있으면(큐가 비어있으면), truck_weights 값을 큐에 넣기, max 값에 더해주기

2. 다리가 비어있지 않다면 (1) 다리에 있는 트럭들이 bridge_length 만큼 있으면 다리 맨 앞에 있는 트럭을 빼준다.

                                   (2) 다리를 건너는 트럭 무게의 합(max)가 weight 이하면 새로운 트럭을 다리에 들여보내기

                                   (3) 다리에 트럭이 들어갈 수 있지만 무게 제한 때문에 안 돼서 트럭을 못 넣어주면, 0을 넣어주기

 

이를 바탕으로 작성한 코드는 다음과 같다.

 

import java.util.*;
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        
        Queue<Integer> queue=new LinkedList<>();
        
        int max=0;
        
        for(int i=0;i<truck_weights.length;i++){
            while(true){
                if(queue.isEmpty()){
                    queue.add(truck_weights[i]); //이거 깜빡해서 에러.....실성ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
                    max+=truck_weights[i];
                    answer++;
                    break;
                }
                else{
                    if(queue.size()==bridge_length){ // 최대 개수의 트럭이 다리에 있으면 트럭 내보내기
                        max-=queue.poll();
                    }
                    if(max+truck_weights[i]<=weight){ // 다리를 건너는 트럭의 무게가 weight 이하면(else if가 아닌 if로)
                        queue.add(truck_weights[i]);
                        max+=truck_weights[i];
                        answer++;
                        break;
                    }
                   else{ // 아닐경우 대신 0을 넣기
                    queue.add(0);
                    answer++;
                   }
                }
            }
        }
        
        return answer+bridge_length;
    }
}

 

 


결론

 

문제 많이 풀어보자...

 

728x90