다리를 지나는 트럭 (JAVA)

HwiJeongLee·2021년 6월 2일
0

프로그래머스

목록 보기
4/6

프로그래머스_다리를 지나는 트럭

풀이

이번 문제는 큐를 사용하면 해결할 수 있는 문제였다.
다만 문제가 있다면 정해진 무게 이상으로는 다리위에 있을 수 없다는 것이였고 이 때문에 많은 if문을 사용해야 했다.

  1. 다리가 비어있다면 트럭을 넣어준다.
  2. 만약 다리길이와 현재 다리 큐의 길이가 같다면 트럭이 다리 반대편에 도착한 것이므로 큐에서 빼준다. (다음 트럭이 들어오기 위함)
  3. 만약 현재 다리의 무게와 다음 트럭의 무게의 합이 제한 무게를 넘지 않을 경우 다리에 트럭을 추가해준다.
  4. 현재 트럭을 더 넣을 수 없을 때, 트럭 하나가 다리를 빠져나갈 때까지 0을 넣어주며 큐를 밀어준다.

지금은 추가적으로 트럭을 넣는 시간만 고려했으로 결과값은 시간에 다리길이를 더해서 반환해준다.

코드 및 실행결과

import java.util.LinkedList;
import java.util.Queue;

class Solution {
   public static int solution(int bridge_length, int weight, int[] truck_weights){
        int time = 0;
        Queue <Integer> bridge = new LinkedList<Integer>();
        int current_weight = 0;
        for(int truck : truck_weights){
            while(true){
                if(bridge.isEmpty()){
                    bridge.offer(truck);
                    current_weight += truck;
                    time++;
                    break;
                }
                else if(bridge.size()==bridge_length){
                    current_weight -= bridge.poll();
                }
                else if(current_weight+truck <= weight){
                    bridge.offer(truck);
                    current_weight += truck;
                    time++;
                    break;
                }else{
                    bridge.offer(0);
                    time++;
                }
            }
        }
        return time + bridge_length;
    }
}

알게된 점

이번문제로 처음 자바의 QUEUE 클래스를 사용해보았다.

Queue <Integer> bridge = new Queue<Integer>();

처음에는 위의 코드로 선언하는 줄 알았다. 하지만 저런 형태는 자바에서 제공하지 않는다고 했다. 그래서...

Queue <Integer> bridge = new LinkedList<Integer>();

큐는 아래와 같이 선언해야 한다고 한다. 정말 처음 알았다.

그리고 큐는 enqueue, dequeue 해주는 함수도 달랐다.

queue.offer(원하는 데이터); //큐에 넣기
queue.poll(); // 큐에서 빼기
queue.peek(); // 큐에서 직접적인 삭제 없이 앞에 있는거 보여주는 기능

앞으로 스택 큐 클래스는 더 자유자재로 사용할 수 있을 것 같다!

profile
초보 개발자의 개발 공간

0개의 댓글

관련 채용 정보