티스토리 뷰

트럭이 한 대씩 다리를 지난다. 즉, 먼저 다리를 건너기 시작한 트럭이 무조건 먼저 다리를 빠져나간다. 

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;
	}
}

Comments