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

🔗 문제링크

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

👩🏻‍💻 코드

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

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 1;
        boolean[] bridge = new boolean[bridge_length];  // 다리위에 트럭이 있는지 없는지
        int weight_sum = 0; // 다리위에 있는 트럭 무게 합
        int idx = 1;    // 대기 트럭 배열의 인덱스

        Queue<Integer> queue = new LinkedList<>();  // 다리를 건너는 트럭리스트

        // 첫번재 트럭 다리에 올리기
        queue.add(truck_weights[0]);
        bridge[bridge_length - 1] = true;
        weight_sum += truck_weights[0];

        while (!queue.isEmpty()) {
            answer++;

            // 다리 위 트럭 한칸씩 이동
            if (bridge[0]) {
                weight_sum -= queue.peek();
                queue.poll();
            }
            for (int i = 0; i < bridge_length - 1; i++) {
                bridge[i] = bridge[i + 1];
            }
            bridge[bridge_length - 1] = false;

            // 대기 트럭 다리로 올리기
            if (idx < truck_weights.length) {
                int next = truck_weights[idx];
                if (weight_sum + next <= weight) {
                    queue.add(next);
                    bridge[bridge_length - 1] = true;
                    weight_sum += next;
                    idx++;
                }
            }
        }

        return answer;
    }
}

📝 정리

다리 위에 있는 트럭을 queue에 넣고 다리 위에 트럭이 있는지 없는지 나타내는 bridge 배열을 통해 bridge[0]이 true 이면 queue에서 제거해 줬다.
다리 위에 있는 트럭을 한 칸씩 앞으로 옮긴 후, 대기하던 트럭을 다리로 올렸다.
그리고 이 과정을 queue가 빌 때까지 반복해 줬다.

내가 푸는 과정에서 헷갈리지 않기 위해 bridge 배열을 선언하고, 트럭들이 한 칸씩 앞으로 움직이는 방법을 사용했는데 다른 사람들의 풀이를 참고하니 다양한 방법이 있었다.

좋은 웹페이지 즐겨찾기