문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
다리에 먼저 진입한 트럭이 먼저 빠지는 FIFO 구조를 가지고 있다. => 즉, Queue를 이용해야 한다.
트럭에 대해 알아야 하는 것은 트럭의 무개와 트럭이 다리에 언제 진입했는지이다.
따라서, 이를 표현하기 위해 Class를 하나 만들어 두었다.
풀이 같은 경우 while문을 이용하였다.
cnt를 증가시키면서 bridge_length 만큼 지났을때 poll을 시키도록 만들어주었다.
참고로 이 코드는 0 부터 트럭이 들어가도록 만들어주었다.
그리고 마지막에 cnt가 1이 더 증가하므로 그냥 답은 cnt가 된다.
코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Info> que = new LinkedList<>();
int w = 0;
int cnt = 0;
int idx = 0;
while(true){
if(!que.isEmpty() && que.peek().t + bridge_length == cnt){
System.out.println(cnt);
Info info = que.poll();
w -= info.w;
}
if(idx < truck_weights.length && w+truck_weights[idx]<=weight){
que.add(new Info(truck_weights[idx], cnt));
w += truck_weights[idx];
idx++;
}
cnt++;
if(idx >= truck_weights.length && que.isEmpty())
break;
}
int answer = cnt;
return answer;
}
class Info {
int w;
int t;
public Info(int w, int t){
this.w = w;
this.t = t;
}
}
}