[JAVA]/Programmers
[JAVA] Programmers <Queue_LV2> 다리를 지나는 트럭
춘햄
2021. 3. 25. 17:04
트럭이 한 대씩 다리를 지난다. 즉, 먼저 다리를 건너기 시작한 트럭이 무조건 먼저 다리를 빠져나간다.
Queue를 사용하면 간단하게 풀리는 문제이다.
처음엔 endPointer을 truck_weight 개수만큼 만들어 push와 pop을 구현하여 만들려고 시도했으나 for문 로직을 완전히 잘못 이해하여 좀 많이 허우적거렸다.
결국 돌고 돌아 LinkedList를 사용하는 JAVA 내부 Queue 클래스를 사용하여 문제를 풀었다.
트럭의 대수만큼 반복문을 돌리고 그 안에서 while문을 돌려 새로운 트럭이 다리를 건너기 시작하면, while을 빠져나와 다음 트럭을 확인하는 절차를 가진다.
반복문은 마지막 트럭이 다리에 올라가면 종료하므로, answer 은 다리의 길이만큼 증가시켜야 정답이 나온다.
Code:
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> bridgeQ = new LinkedList<Integer>();
int totalWeightOn = 0;
for (int i : truck_weights) {
while (true) {
if (bridgeQ.isEmpty()) {
bridgeQ.add(i);
totalWeightOn += i;
answer++;
break;
} else if (bridgeQ.size() == bridge_length) {
totalWeightOn -= bridgeQ.poll();
} else {
if (totalWeightOn + i <= weight) {
bridgeQ.add(i);
answer++;
totalWeightOn += i;
break;
} else {
bridgeQ.add(0);
answer++;
}
}
}
}
return answer + bridge_length;
}
}
반응형