알고리즘/programmers

[프로그래머스]다리를 지나는 트럭[JAVA, 자바]

장그래 2021. 3. 26. 14:05
반응형

문제 설명

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.

예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

풀이 방법

  • 먼저 지나간 트럭이 먼저 나오기 때문에 선입선출 구조를 가진 queue를 사용해서 풀 수 있다.
  • 하지만 현재 무게를 구하기 위해 인덱스를 사용했기 때문에 나는 arraylist를 사용했다. 굳이 현재 무게를 탐색하면서 풀면 안됐지만, 이 방법도 풀리기 때문에 글을 작성했다. (절대 효율적인 방법은 아님!)

알아야되는 개념

  • arraylist
import java.util.*;
class Solution {
    int check_weight(ArrayList<Integer>arr){
        int sum = 0;
        for(int i=0;i<arr.size();i++)
            sum+=arr.get(i);
        return sum;
    }
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        ArrayList<Integer> arr = new ArrayList<>();
        ArrayList<Integer> truck = new ArrayList<>();
        for(int i=0;i<truck_weights.length;i++)
            truck.add(truck_weights[i]);
        truck.add(0);
        int answer = 0;
        int k = 0;
        while(true){
            if(check_weight(arr) + truck.get(k) <= weight){
                arr.add(truck.get(k));
                if(k < truck_weights.length) k++;
                if(check_weight(arr) == 0) break;
            }
            else
                arr.add(0);
            if(arr.size() == bridge_length)
                arr.remove(0);
            answer++;
        }
        return answer + 1;
    }
}
반응형