https://school.programmers.co.kr/learn/courses/30/lessons/42583
풀이
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> q = new LinkedList<>();
for(int i = 0; i < bridge_length; i++){
q.add(0);
}
int nowWeigth = 0;
int time = 0;
int idx = 0;
while(idx < truck_weights.length){
time++;
int out = q.poll();
nowWeigth -= out;
if(nowWeigth + truck_weights[idx] <= weight){
nowWeigth += truck_weights[idx];
q.add(truck_weights[idx]);
idx++;
}else{
q.add(0);
}
}
while(!q.isEmpty()){
time++;
}
int answer = time;
return answer;
}
}
먼저 큐에 다리의 길이만큼 0을 채워준다.(0은 다리에서 빈 칸의 역할 겸 길이의 역할을 수행한다.)
이후 현재 다리의 무게, 시간, 그리고 트럭의 인덱스를 선언해준다.
이후 트럭의 인덱스가 끝까지 가기 전까지 while문을 반복해준다.
1. 무조건 1초는 흐른다.
2. 시간이 흐름에 따라 무조건 하나의 차는 나오게 된다(0도 차라고 생각해버리자.)
3. 현재 나온 차의 무게를 다리 위의 무게에서 빼주자.(이렇기 때문에 0도 차라고 생각해도 된다.)
4-1. 만약 현재 다리의 무게 + 다음 올라와야 할 트럭의 무게 <= 다리가 지탱 가능한 무게 라면 무게에 트럭의 무게를 더하고 큐에 올리자.-> 차가 올라왔다고 표시하는 것! -> 인덱스도 하나 올리자(이미 그 트럭은 들어왔으니까)
4-2. 만약 현재 다리의 무게 + 다음 올라와야 할 트럭의 무게 > 다리가 지탱 가능한 무게 -> 0을 큐에 올려주자.(이번 시간동안은 0이라는 무게의 차가 올라가는 것)
최종적으로 인덱스가 끝나면 큐에 남아있는 차들을 모두 비워내야한다. (결과적으로 마지막에 나오는 차의 무게는 0이 아닌 양수일 수밖에 없다.)
'문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] k번째 수(JAVA) (1) | 2024.04.26 |
---|---|
[프로그래머스] 더 맵게(JAVA) (2) | 2024.04.26 |
[프로그래머스] 프로세스(JAVA) (0) | 2024.04.25 |
[프로그래머스] 올바른 괄호(JAVA) (0) | 2024.04.24 |
[프로그래머스] 기능개발(JAVA) (0) | 2024.04.24 |