문제를 보자마자 큐를 이용해야 한다는 느낌이 왔다.
다만 실제 코드 작성은 쉽게 되지 않았다.
특히 까다로웠던 부분은 다리 위 트럭 무게 총합 + 다음 올라와야 하는 트럭 무게가 다리 하중보다 큰 경우였는데
이때 가장 먼저 올라갔던 트럭이 내려와야 하므로 대기하는 시간을 추가하는 부분이었다.
이 부분을 고려하지 못해서 계속 실패하다 검색을 통해 힌트를 얻어 해결했다.
최종 코드
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> queue = new LinkedList<>();
// 다리 위 트럭 무게 총합
int temp = 0;
int i = 0;
// 모든 트럭이 다리 위에 올라가도록 계속 반복
while (true) {
// 마지막 트럭이 다리에 올라가면
if(i == truck_weights.length) {
break;
}
// 트럭이 다리 끝에 도달하면 하면 다리 위 트럭 무게에서 빼기
if(queue.size() == bridge_length) {
temp -= queue.poll();
}
// 다리 위 트럭 무게 총합 + 다음 올라와야 하는 트럭 무게가 다리 하중보다 크면
else if(temp + truck_weights[i] > weight) {
// 먼저 올라간 트럭이 내려와야 하므로 0을 추가하고 1초 대기
queue.add(0);
answer++;
}
else {
queue.add(truck_weights[i]);
temp += truck_weights[i];
i++;
answer++;
}
}
// 마지막 트럭이 다리위에 올라간 상태에서 다리 길이를 더하기
answer = answer + bridge_length;
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 괄호 변환 (0) | 2022.03.06 |
---|---|
(Java) 프로그래머스 오픈채팅방 (0) | 2022.03.03 |
(Java) 프로그래머스 소수찾기_L2 (0) | 2022.01.23 |
(Java) 프로그래머스 위장 (0) | 2022.01.18 |
(Java) 프로그래머스 카펫 (0) | 2022.01.16 |