문제
입출력 예
풀이.
1. 선입선출(FIFO)의 구조를 가진 큐를 사용하여 다리위에 올라가있는 트럭들의 무게를 더해줄 변수 sum 선언
2. 큐가 비어있을 때 / 비어있지 않을 때로 나누어서 진행
2-1. 비어 있다면 q에 삽입후 시간 1초 증가
2-2. 큐에 들어간 트럭의 수(q의 사이즈) 가 다리 길이와 같다면 큐에서 빼주고 sum에서 빼줌
2-3. 트럭을 추가 했을 때 최대 무게를 초과 한다면 0을 삽입하고 시간 증가
2-4. 최대 무게 이내일 경우 q에 삽입후 시간 1초 증가
3. 마지막에 올라간 트럭이 시간이 지나간 시간이 더해지지 않고 종료 되기 때문에 다리길이만큼 시간을 더해준 값을 리턴.
코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> q = new LinkedList<>();
int sum = 0; //다리를 건너는 트럭 무게 합
for(int t : truck_weights){
while(true){
//큐가 비어 있으면 다음 트럭
if(q.isEmpty()){
q.offer(t);
sum += t;
answer++;
break;
}
//큐의 사이즈랑 다리 길이가 같으면 처음값을 빼내고 sum에서 빼준다.
else if(q.size() == bridge_length){
sum -= q.poll();
}else{ //큐가 비어있지않을경우
if(sum + t > weight){
q.offer(0);
answer++;
}else{
q.offer(t);
sum+=t;
answer++;
break;
}
}
}
}
return answer + bridge_length;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
(LEVEL 1)프로그래머스 - 대충 만든 자판 (JAVA) (0) | 2023.03.01 |
---|---|
(LEVEL 2)프로그래머스 - 2 x n 타일링 (JAVA) (0) | 2023.02.25 |
(LEVEL 2)프로그래머스 - 카펫(JAVA) (0) | 2023.02.09 |
(LEVEL 1)프로그래머스 - 같은 숫자는 싫어(JAVA) (0) | 2023.01.30 |
(LEVEL 1)프로그래머스 - 로또의 최고 순위와 최저 순위(JAVA) (0) | 2023.01.18 |