알고리즘 문제 풀이 / 프로그래머스 (programmers) - 다리를 지나는 트럭
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42583
문제 풀이
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 1;
Queue<Integer> wait = new LinkedList<>();
Queue<Integer> current = new LinkedList<>();
Queue<Integer> end = new LinkedList<>();
int time[] = new int[truck_weights.length];
for(int i = 0; i < truck_weights.length; i++)
wait.add(truck_weights[i]);
int count = wait.size();
int num = wait.poll();
int start = 0;
while(end.size() < count) {
if(num != 0 && sum(current, num) <= weight) {
current.add(num);
num = wait.size() == 0 ? 0 : wait.poll();
}
for(int i = start; i < start + current.size(); i++)
time[i]++;
if(time[start] == bridge_length) {
end.add(current.poll());
start++;
}
answer++;
}
return answer;
}
public static int sum(Queue c, int num) {
int sum = num;
int size = c.size();
if(size != 0){
for(int i = 0; i < size; i++) {
sum += (int) c.peek();
c.add(c.poll());
}
}
return sum;
}
- 대기중인 트럭들은 wait, 다리에 있는 트럭들은 current,
각 트럭마다 time의 시간을 부여해서 문제에서 주어진 bridge_length이 지난 트럭들은 end에 넣어줬다.
- sum 함수를 만들어 현재 다리위에 있는 트럭의 무게의 합들을 따로 구했다.
- end 의 사이즈가 문제에서 주어진 트럭들의 총 개수와 같다면 로직을 종료했다.
- 전부 빠져나왔을 때 1초를 치므로 첫 시작 answer 에 1을 미리 더해줬다.
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스(programmers)] (Lv2) 전화번호 목록 (0) | 2021.05.20 |
---|---|
[프로그래머스(programmers)] (Lv1) K번째 수 (0) | 2021.05.19 |
[프로그래머스(programmers)] (Lv1) 완주하지 못한 선수 (0) | 2021.05.19 |
[프로그래머스(programmers)] (Lv2) 프린터 (0) | 2021.05.17 |
[프로그래머스(programmers)] Summer/Winter Coding(~2018) 배달 (2) | 2021.05.16 |
댓글