https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
처음에는 문제 이해가 어려웠지만 몇가지 규칙만 이해하고 큐를 사용하면 쉽게 해결 가능한 문제이다.
- 다리에 트럭이 한대도 없는 경우 : 트럭을 큐에 추가
- 트럭이 다리에 꽉 찬경우 : 트럭을 큐에서 삭제
- 다리에 트럭이 꽉 차지 않은 경우 : 트럭을 큐에 추가하거나 트럭을 앞으로 이동시킴
단, 주의 할 점은 마지막 트럭이 내릴때의 시간까지 구하기 위해
return 값은 time + bridge_length로 해줘서 정확한 결과를 리턴해줘야 한다.
또한, 다리에 트럭이 다 차지 않았는데, 다음 트럭이 무게때문에 들어올 수 없는 경우는 queue.add(0)을 해줘서 sum변수에 영향이 안가도록 해줘야 한다.
<전체 코드>
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int sum = 0;
int time = 0;
Queue<Integer> queue = new LinkedList<>();
for(int i=0; i<truck_weights.length; i++){
int truck = truck_weights[i];
while(true){
if(queue.isEmpty()){ //다리에 트럭이 한대도 없는 경우
queue.add(truck);
time++;
sum+=truck;
break;
}
else if(queue.size() == bridge_length){ //다리에 트럭이 다 찬 경우
sum-=queue.poll();
}
else{ //다리의 길이만큼 트럭이 차지 않은 경우
if(sum+truck<=weight){ //트럭이 다리위에 더 들어올 수 있는 경우
queue.add(truck);
sum+=truck;
time++;
break;
}else{ //0을 큐에 넣어서 sum에 영향을 안주도록 한다.
queue.add(0);
time++;
}
}
}
}
return time+bridge_length;
}
}
'알고리즘 > 스택 큐' 카테고리의 다른 글
프로그래머스 - 주식가격[Java] (1) | 2025.03.12 |
---|---|
프로그래머스 - 프로세스(Java) (0) | 2025.01.02 |
프로그래머스 - 올바른 괄호(Java) (0) | 2025.01.02 |
프로그래머스 - 기능개발(Java) (0) | 2025.01.01 |
프로그래머스 - 같은 숫자는 싫어(Java) (1) | 2024.12.31 |