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

nnm·2020년 3월 5일
1

프로그래머스 다리를 지나는 트럭

문제풀이

큐를 이용해서 간단하게 구현하는 문제인데 생각보다 오래걸렸다... 같은 유형의 문제만 풀다보니 생각이 틀에 갖혀서 유연하게 생각하지 못 한 것 같다.

  • 트럭은 1초에 1씩 움직인다.
  • 트럭은 순서대로 움직인다.
  • 트럭의 위치를 바꿔주기 보다 진입한 시간을 기록하여 계산하자.
  • 다리에 있는 트럭이 먼저 빠져나가고 진입한다.

구현코드

import java.util.*;

class Solution {
    class Truck {
        int weight;
        int entry;
        
        Truck(int weight, int entry){
            this.weight = weight;
            this.entry = entry;
        }
    }
    
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        Queue<Truck> waiting = new LinkedList<>();
        Queue<Truck> bridge = new LinkedList<>();
        
        for(int i = 0 ; i < truck_weights.length ; ++i){
            waiting.offer(new Truck(truck_weights[i], 0));
        }
        
        int time = 0;
        int totalWeight = 0;
        while(!waiting.isEmpty() || !bridge.isEmpty()){   
        	time++;
        	if(!bridge.isEmpty()) {
        		Truck t = bridge.peek();
        		if(time - t.entry >= bridge_length) {
        			totalWeight -= t.weight;
        			bridge.poll();
        		}
        	}
        	
        	if(!waiting.isEmpty()) {
        		if(totalWeight + waiting.peek().weight <= weight) {
        			Truck t = waiting.poll();
        			totalWeight += t.weight;
        			
        			bridge.offer(new Truck(t.weight, time));
        		}
        	}
        }
        return time;
    }
}
profile
그냥 개발자

2개의 댓글

comment-user-thumbnail
2020년 7월 31일

풀이 너무 잘봤습니다. 감사합니다 :)
혹시
if(!bridge.isEmpty()) {} 이부분과
if(!waiting.isEmpty()) {} 이부분의 위치를 바꾸면 다른값이 나오는 이유를 알려주실 수 있을까요??
제 생각에는 똑같은걸로만 생각이 되는데 값이 다르게 나오네요 ㅠㅠ 고민하다가 댓글 남깁니다..

1개의 답글