반응형
문제 설명
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 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;
}
}
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[프로그래머스]기능개발[JAVA, 자바] (0) | 2021.03.26 |
---|---|
[프로그래머스]스킬트리[JAVA, 자바] (0) | 2021.03.26 |
[프로그래머스]같은 숫자는 싫어[JAVA, 자바] (0) | 2021.03.23 |
[프로그래머스]3진법 뒤집기[JAVA, 자바] (0) | 2021.03.23 |
[프로그래머스]체육복[JAVA, 자바] (0) | 2021.03.23 |