프로그래밍/알고리즘

[ 프로그래머스 : 스택/큐 ] 다리를 지나는 트럭

말랑공룡 2020. 10. 23. 16:06
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
* https://programmers.co.kr/learn/courses/30/lessons/42583
*/
public class 다리를지나는트럭2 {

    public static void main(String[] args) {

        int answer = solution(2, 10, new int[]{7,4,5,6});
        //int answer = solution(100, 100, new int[]{10,10,10,10,10,10,10,10,10,10});
        System.out.println(answer);
    }

    public static int solution(int bridge_length, int weight, int[] truck_weights) {

        Queue<Integer> waiting = new LinkedList<>();
        Queue<Integer> bridge = new LinkedList<>();
        List<Integer> complete = new ArrayList<>();

        for(int i : truck_weights){
            waiting.add(i);
        }

       for(int i = 0 ; i < bridge_length; i++){
           bridge.add(null);
       }

        Integer truck;
        int answer = 0;

        while(complete.size() != truck_weights.length){
            truck = waiting.peek();

            if(truck == null){
                answer += bridge_length;
                break;
            }else{
                if(getBridgeWeight(bridge) + truck <= weight){
                    if(bridge.peek() != null){
                        complete.add(bridge.remove());
                    }else{
                        bridge.remove();
                    }
                    bridge.add(waiting.remove());
                    answer++;
                }else{

                    while(bridge.peek() == null){
                        bridge.add(bridge.remove());
                        answer++;
                    };

                    complete.add(bridge.remove());

                    if(getBridgeWeight(bridge) + truck <= weight){
                        bridge.add(waiting.remove());
                    }else{
                        bridge.add(null);
                    }

                    answer++;
                }
            }

        }

        return answer;
    }

   static int getBridgeWeight(Queue<Integer> bridge){
        int result = 0;
        for(Integer i : bridge){
            result+=(i == null ? 0 : i);
        }
        return result;
    }

 

겁나 오래걸리고 겁나 드러운 코드지만

나중에 집에서 다시 한번 생각해볼건데 여기(...)서 git이 안되서 블로그에 올려논다.

전체공개로 해놓는 이유는, 내 코드를 보고 모두가 자신감을 얻었으면 하는.... 바램에...(거짓말ㅠ)