https://school.programmers.co.kr/learn/courses/30/lessons/42583
트럭이 다리를 지나는 속도는 1 인듯 하다.
모든 트럭이 다리위에 올라서기전까지 시간을 1씩 증가시키면서(t++)
다리를 지나고 있는 트럭들을 1씩 전진시키고(log[i]++)
다리를 통과한 트럭이 있을 경우( > bridge_length) 다리를 지나는 트럭들의 무게와 트럭 수를 줄여주고(w -=, c--)
다음 대기열의 트럭을 출발 시킬지 말지 결정해준다.
마지막 트럭까지 다리 위로 올라가게 되면, 마지막 트럭이 다리를 통과하는데 걸리는 시간을 최종적으로 더해주면 끝(t +=)
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int[] log = new int[truck_weights.length];
int lt = 0, rt = 0;
// 소요 시간
int t = 0;
// 다리를 지나는 트럭들의 무게
int w = 0;
// 다리를 지나는 트럭 수
int c = 0;
while (rt < truck_weights.length) {
t++;
for (int i = lt; i <= rt; i++) {
if (log[i] > 0) log[i]++;
if (log[i] > bridge_length) {
lt++;
w -= truck_weights[i];
c--;
}
}
int truck = truck_weights[rt];
if (truck + w <= weight && c + 1 <= bridge_length) {
log[rt]++;
w += truck;
c++;
rt++;
}
}
t += (bridge_length - log[log.length - 1] + 1);
return t;
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
삼각 달팽이 (0) | 2023.11.13 |
---|---|
소수 찾기 (1) | 2023.11.13 |
가장 큰 수 (0) | 2023.11.09 |
쿼드압축 후 개수 세기 (0) | 2023.11.06 |
2개 이하로 다른 비트 (0) | 2023.11.06 |