교육/코테

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

가이버2 2022. 7. 6. 18:18

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42583

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        
        //큐 생성
        List<Truck> waits = new ArrayList<>();
        List<Truck> onBridge = new ArrayList<>();

        //초기값 세팅
        for(int i=0; i< truck_weights.length; i++){
            //인덱스, 무게, 다리길이(진행상황)
            waits.add(new Truck(i, truck_weights[i], bridge_length));
        }

        //두 배열 모두 사이즈가0이 아니면 참
        while(!(onBridge.isEmpty() && waits.isEmpty())){
            //다리위의 모든 트럭 순회
            Iterator<Truck> bIt = onBridge.iterator();
            while(bIt.hasNext()){
                Truck next = bIt.next();
                next.move();
                if(next.checkFinish()) bIt.remove();
            }

            //대기 트럭 1개 접근
            Iterator<Truck> wIt = waits.iterator();
            if(wIt.hasNext()){
                int sum = onBridge.stream().mapToInt(v -> v.weight).sum();
                Truck next = wIt.next();
                if(sum+next.weight <= weight){
                    onBridge.add(next);
                    wIt.remove();
                }
            }
            //진행시간
            answer++;
        }
        
        return answer;
    }
    
        public class Truck{

        int index;
        int weight;
        int bridgePosition;

        public Truck(int index, int weight, int bridge_length){
            this.index = index;
            this.weight = weight;
            this.bridgePosition = bridge_length;
        }

        public void move(){
            if(bridgePosition > 0) bridgePosition--;
        }

        public boolean checkFinish(){
            return bridgePosition == 0;
        }

        @Override
        public String toString() {
            return "Truck{" +
                    "index=" + index +
                    ", weight=" + weight +
                    ", bridgePosition=" + bridgePosition +
                    '}';
        }
    }
}