728x90


이번에도 큐를 이용하는 문제이다.
풀이
문제에서 "다리를 건너는 트럭" 이 부분을 큐로 구현한다. 즉, 문제에서 다리=큐
그러면 다리의 길이(length)는 큐의 크기(queue.size())와 같은 의미가 되는 것
그리고 weight는 임의의 변수 max를 만들어 판별할 수 있게끔 한다.
1. 다리가 비어있으면(큐가 비어있으면), truck_weights 값을 큐에 넣기, max 값에 더해주기
2. 다리가 비어있지 않다면 (1) 다리에 있는 트럭들이 bridge_length 만큼 있으면 다리 맨 앞에 있는 트럭을 빼준다.
(2) 다리를 건너는 트럭 무게의 합(max)가 weight 이하면 새로운 트럭을 다리에 들여보내기
(3) 다리에 트럭이 들어갈 수 있지만 무게 제한 때문에 안 돼서 트럭을 못 넣어주면, 0을 넣어주기
이를 바탕으로 작성한 코드는 다음과 같다.
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> queue=new LinkedList<>();
int max=0;
for(int i=0;i<truck_weights.length;i++){
while(true){
if(queue.isEmpty()){
queue.add(truck_weights[i]); //이거 깜빡해서 에러.....실성ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
max+=truck_weights[i];
answer++;
break;
}
else{
if(queue.size()==bridge_length){ // 최대 개수의 트럭이 다리에 있으면 트럭 내보내기
max-=queue.poll();
}
if(max+truck_weights[i]<=weight){ // 다리를 건너는 트럭의 무게가 weight 이하면(else if가 아닌 if로)
queue.add(truck_weights[i]);
max+=truck_weights[i];
answer++;
break;
}
else{ // 아닐경우 대신 0을 넣기
queue.add(0);
answer++;
}
}
}
}
return answer+bridge_length;
}
}
결론
문제 많이 풀어보자...
728x90
'Algorithm > programmers' 카테고리의 다른 글
| [프로그래머스] 프린터 (자바/java) (0) | 2021.05.19 |
|---|---|
| [프로그래머스] 기능개발 (자바/java) (0) | 2021.05.19 |
| [프로그래머스] 모의고사 (자바/java) (0) | 2021.05.07 |