Queue의 개념을 알고있어야 풀이가 가능한 문제이다.
풀이 과정
- 다리가 비어있을때 큐에 트럭을 담아주고 트럭의 무게값을 변수에 합산해준다.
- 다리가 꽉차 있을경우 poll()을 사용하여 맨앞 트럭을 빼주고 무게값에서 빠진 트럭의 무게만큼 빼준다.(poll()을 사용하게 될경우 큐의 앞의 제거하고 반환해주게된다.)
- 두 가지 경우를 모두 벗어나고, 무게가 초과하는 경우 큐에 0을 담아주어 트럭을 한칸 밀어준다.
- 두 가지 경우를 모두 벗어나고, 무게가 초과하지 않는 경우 다리가 비었을때와 동일하게 큐에 트럭을 담아주고 무게값을 합산해준다.
풀이 코드
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int sum_weight = 0;
Queue<Integer> truck = new LinkedList<>();
for (int i : truck_weights) {
while (true) {
//다리위가 비어있는 경우
if (truck.isEmpty()) {
truck.add(i);
sum_weight += i;
answer++;
break;
//다리가 꽉차있는경우
} else if (truck.size() == bridge_length) {
sum_weight -= truck.poll();
} else {
//다리가 비어있지도,꽉차지도 않고 견디는 무게보다 큰경우
if (i + sum_weight > weight) {
truck.add(0);
answer++;
} else {
truck.add(i);
sum_weight += i;
answer++;
break;
}
}
}
}
//다리위에 있는 모든 트럭이 지나가야되기 때문에 다리길이 더해주기
return answer + bridge_length;
}
}
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] Level2. 124 나라의 숫자 (Java) (0) | 2021.04.25 |
---|---|
[Programmers] Level2. 주식가격 (Java) (0) | 2021.04.17 |
[Programmers] Level1. 자릿수 더하기 (Java) (0) | 2021.01.25 |
[Programmers] Level1. 이상한 문자 만들기 (Java) (0) | 2021.01.24 |
[Programmers] Level1. 약수의 합 (Java) (0) | 2021.01.24 |