[Java 큐] 프로그래머스 - 다리를 지나는 트럭

gonudayo·2021년 8월 15일
0
post-thumbnail

간단한듯.

풀이

  1. 대기줄에 truck_weights 을 넣는다.
  2. 현재 다리가 버틸 수 있는 무게 이하라면 트럭이 진입한다.
    2-1. 현재 다리가 버틸 수 있는 무게에서 진입한 트럭의 무게를 차감한다.
    2-2. 다리길이 만큼 진행한 트럭은 다리를 빠져나갔음으로,
    현재 다리가 버틸 수 있는 무게빠져나간 트럭의 무게를 더한다.
  3. 다리에 트럭이 없으면 끝낸다.

전체코드

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int time = 0;
        Queue<Integer> waiting = new LinkedList<>();
        Queue<Pair> bridge = new LinkedList<>();
        
        for(int i : truck_weights) waiting.offer(i);
        
        while(true) {
            time++;
            
            if(!bridge.isEmpty() && time - bridge.peek().t == bridge_length) {
                weight += bridge.poll().w;
            }
            
            if(!waiting.isEmpty() && waiting.peek() <= weight) {
                bridge.offer(new Pair(waiting.peek(), time));
                weight -= waiting.poll();
            }
            
            if(bridge.isEmpty()) break;
        }
        
        return time;
    }
}
class Pair{
	int w;
	int t;
	Pair(int w,int t){
		this.w = w;
		this.t = t;
	}
}

트럭의 다리 진입

if(!waiting.isEmpty() && waiting.peek() <= weight) {
	bridge.offer(new Pair(waiting.peek(), time));
	weight -= waiting.poll();
}

대기줄 맨 앞의 트럭의 무게현재 다리가 버틸 수 있는 무게 이하라면 진입한다.
다리 큐에 트럭의 무게와 현재시간을 넣는다.
다리위에 트럭이 추가 되었으므로, 현재 다리가 버틸 수 있는 무게에서 트럭의 무게를 차감한다.

트럭의 다리 탈출

if(!bridge.isEmpty() && time - bridge.peek().t == bridge_length) {
	weight += bridge.poll().w;
}

현재시간 - 트럭이 진입한 시간 이 트럭의 다리위에서 경과한 시간이다.
다리의 길이 1 : 1초 의 비율 이므로 경과한 시간이 다리의 길이와 같다면, 탈출한다.
다리위에서 트럭이 빠졌으므로, 현재 다리가 버틸 수 있는 무게트럭의 무게를 더한다.

if(bridge.isEmpty()) break;
다리에 트럭이 없을 경우 끝낸다.

profile
초신성 백엔드 개발자

0개의 댓글