[프로그래머스]stack/queue-다리를 지나는 트럭

snusun·2021년 1월 6일
0

먼저 bridge 배열을 bridge 길이만큼 선언하고 큐에 트럭 무게 배열을 넣어주었다!

다리 위의 트럭들+다음트럭이 무게 한도에 못미치면 다음 트럭을 올리고, 무게 한도를 넘으면 다음 트럭 올리지 말고 다리 위 트럭들만 한칸씩 이동!

그 와중에 answer을 increment하여 초를 센다..

코드를 간결하게 하기 위해 함수도 두개 사용. 트럭을 한칸씩 이동시키는 함수, 다리 위의 트럭들의 총 무게를 구하는 함수.

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

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int[] bridge = new int[bridge_length];
        int answer = 1;
        int i=0;
        Queue<Integer> queue = new LinkedList<>();

        for(; i<truck_weights.length; i++){
            queue.add(truck_weights[i]);
        }
        bridge[0] = queue.poll();

        while(weight(bridge) != 0){
            if(!queue.isEmpty() && weight(bridge) - bridge[bridge_length-1] + queue.peek() <= weight) {
                move(bridge);
                bridge[0] = queue.poll();
            } else {
                move(bridge);
            }
            answer++;
        }

        return answer;
    }

    public int[] move(int[] bridge) {
        for(int i=bridge.length-2; i>=0; i--){
            bridge[i+1] = bridge[i];
        }
        bridge[0] = 0;
        return bridge;
    }

    public int weight(int[] bridge) {
        int total_weight = 0;
        for(int i=0; i<bridge.length; i++){
            total_weight += bridge[i];
        }
        return total_weight;
    }
}

다른 사람들의 답을 보니 트럭 클래스를 선언하신 분도 있다..
다음에는 나도 그렇게 해봐야지!

profile
대학생 근데 이제 컴공을 곁들인

0개의 댓글