티스토리 뷰

728x90

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

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

 

point 1) 단순하게 Truck 클래스를 생성한다.

point 2) 트럭이 들어오는 부분을 마지막에 실행한다. 

point 3) peek를 이용해 확인한다.

import java.util.*;

class Truck {
    int weight;
    int position;

    public Truck(int weight) {
        this.weight = weight;
        this.position = 1;
    }

    public void move() {
        position++;
    }
}
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        int curWeight = 0;
        Queue<Truck> waitQ = new LinkedList<>();
        Queue<Truck> moveQ = new LinkedList<>();
        for(int tw : truck_weights) {
            waitQ.offer(new Truck(tw));
        }

        Truck qItem = null;
        while(!waitQ.isEmpty() || !moveQ.isEmpty()) {
            answer ++;
            if(moveQ.isEmpty()) {
                qItem = waitQ.poll();
                moveQ.offer(qItem);
                curWeight += qItem.weight;
                continue;
            }

            for(Truck t : moveQ) {
                t.move();
            }

            if(moveQ.peek().position > bridge_length) {
                curWeight -= moveQ.poll().weight;
            }

            // 트럭이 들어오는 부분을 마지막에 실행한다. 
            if(!waitQ.isEmpty() && curWeight + waitQ.peek().weight <= weight) {
                Truck t = waitQ.poll();
                curWeight += t.weight;
                moveQ.offer(t);
            }
        }
        return answer;
    }
}
728x90

'코딩테스트' 카테고리의 다른 글

[프로그래머스] 올바른 괄호  (0) 2022.11.02
[프로그래머스] 주식가격  (0) 2022.06.10
[프로그래머스] 프린터  (0) 2022.04.27
[프로그래머스] 기능개발  (0) 2022.04.19
[프로그래머스] 베스트앨범  (0) 2022.04.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31