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

dev_kiiim·2022년 12월 15일
0

CODING TEST

목록 보기
18/23
post-thumbnail

오늘 풀어본 문제는 페어코딩을 하기위한 문제였지만,,
야근을 하는 바람에 혼자 풀어본 문제가 되었다,,😂

알고리즘 분류는 스택/큐 이며,
다리의 길이(bridge_length), 다리가 견딜 수 있는 무게(weight), 트럭의 무게(truck_weights)를 가지고 모든 트럭이 다리를 건너기까지 걸린 시간을 출력하는 문제였다.

내가 풀면서 살짝 설명이 부족하다고 생각했던 부분은 bridge_length의 1만큼 지날 때 시간이 1만큼 걸린다는 점이었다.
이 부분까지 확인하고 문제를 풀어보았다.


public int solution(int bridge_length, int weight, int[] truck_weights) {
    int answer = 0;
    Queue<Integer> queue = new LinkedList<>();
    int sum = 0;

    for(int i=0; i<truck_weights.length; i++) {
        while (true) {
            if(queue.isEmpty()){
                queue.offer(truck_weights[i]);
                answer++;
                sum += truck_weights[i];
                break;
            }else if(queue.size() == bridge_length){
                sum -= queue.poll();
            }else{
                if(sum + truck_weights[i] > weight){
                    queue.offer(0);
                    answer++;
                }else{
                    queue.offer(truck_weights[i]);
                    answer++;
                    sum += truck_weights[i];
                    break;
                }
            }
        }
    }

    return answer + bridge_length;
}

처음에 생각했던 방법은 queue의 크기를 bridge_length로 지정해두고 구현하는 방법을 생각했었는데,,
검색해보니 CircularQueue, EvictingQueue 를 이용해서 풀 수 있다고 하던데,, Apache Commons, Google Guava 와 같은 라이브러리? 를 사용해야 하는 방법이라 포기하고,
큐의 크기를 지정해주는 클래스를 별도로 만들어서 사용하려 하였으나 생각대로 구현이 안돼서 포기하였다😂

결국은 조건문을 이용해서 풀었는데
큐를 다리라고 생각하고 큐가 비어있을 때 트럭을 넣고, 큐에 올라간 트럭의 무게를 int형 변수 sum으로 계산해서
sum이 주어진 weight보다 큰 경우에는 0을 넣어서 다음 트럭이 올라가지 않도록 구현해주었다.
추가로 큐의 크기가 bridge_length와 같을 땐, poll을 해주면서 그 값만큼 sum에서 빠질 수 있도록 구현해주었다.

0개의 댓글