본문 바로가기
IT/알고리즘

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

by 어센트 2019. 11. 16.

package lv2;

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

public class 다리를지나는트럭 {

	public static void main(String[] args) {
		다리를지나는트럭 app = new 다리를지나는트럭();
		int [] so = {10};

		app.solution(100, 100,so );
	}
	class T{
		int pos;
		int w;
		T (int pos,int w){
			this.pos = pos;
			this.w = w;
		}
	}
	public int solution(int bridge_length, int weight, int[] truck_weights) {
		int answer = 0;
		Queue<T> before = new LinkedList<T>();
		Queue<T> onB = new LinkedList<T>();
		for(int i: truck_weights) { // 다리지나기 전을 저장하는 큐에 모든 트럭저장
			T truck = new T(0,i);
			before.add(truck);

		}
		while(!before.isEmpty() || !onB.isEmpty()) {
			
			
			T doneTruck = null;
			int sum = 0;
			
			for(T truck : onB) { //다리위 트럭을 검사
				sum+= truck.w;
				truck.pos++;
				
				if(truck.pos>bridge_length) { //다리를 지났다면
					doneTruck = truck;
				}
			}
			
			if(doneTruck != null) { //다리를 지난 트럭이 존재한다면
				onB.remove(doneTruck);
				sum -= doneTruck.w;
				
			}
			
			if(!before.isEmpty() && (onB.size() < bridge_length) ){
				T truck = before.peek();
				
				if(truck.w + sum <= weight) { // 다리위에 트럭을 올려도되는지 확인
					before.remove();
					onB.add(truck);
					truck.pos++;
				}
						
			}
			
			answer++;
		}
		System.out.println(answer);
		return answer;
	}



}