programmers.co.kr/learn/courses/30/lessons/42583?language=java
## 접근방법
모든 트럭이 다리를 지나는 시간을 구하면 된다. 트럭마다 무게가 다르고, 다리가 견딜 수 있는 하중 무게도 생각해야 한다.
큐를 이용하면, 트럭들의 무게와 다리를 지나는 시간을 저장할 수 있다 .큐를 사용하는 이유는, 큐의 후입선출 방식때문이다. 즉, 나중에 들어온 트럭들은 순차적으로 큐에 쌓이고, 큐의 포인터가 가리키는 것은 첫번째 원소이다.
다음 트럭이 들어오기 위해서는, 가장 먼저 들어온 트럭 순으로 다리를 지나는 시간이 되는 순간, 큐에서 제거되면 된다.시간 복잡도는 다리의 길이 * 트럭의 개수가 될 것이다.
좀 더 좋은 풀이를 생각해보고 싶었지만, 현재 상황으로는 큐가 가장 적합한거 같다. 어떤 트럭이 들어가기 위해서는, 트럭들이 다리를 지나는 완료 시간들을 순차적으로 저장하는 자료구조가 필요했기 때문이다.
## 해설코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
class Solution {
class Item{
int w, t;
Item(int w, int t){
this.w = w;
this.t = t;
}
}
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int curWeight = 0;
int time = 0;
int tIdx = 0;
Queue<Item> q = new LinkedList<>();
while(tIdx != truck_weights.length){
if(!q.isEmpty() && q.peek().t == time){
curWeight -= q.peek().w;
q.poll();
}
if(truck_weights[tIdx] + curWeight <= weight){
q.add(new Item(truck_weights[tIdx], time + bridge_length));
curWeight += truck_weights[tIdx];
tIdx++;
}
time++;
}
return time + bridge_length;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 섬 연결하기(Java, Greedy, Lv3) (0) | 2021.04.24 |
---|---|
[프로그래머스] 큰 수 만들기(Java, Greedy, Lv2, 새로운 코드, 사고력) (0) | 2021.04.23 |
[프로그래머스] 조이스틱(Lv2, Greedy, 사고력, Java) (0) | 2021.04.23 |
[프로그래머스] 체육복(Greedy, Java, Lv1, 사고력) (0) | 2021.04.22 |
[프로그래머스] 단속카메라(Java, Greedy, 사고력, Lv3) (0) | 2021.04.22 |