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

Pixel Dophin·2023년 9월 5일
0

프로그래머스

목록 보기
50/55

다리를 지나는 트럭

문제링크

풀이

stack
1. bridge라는 이름의 queue를 다리의 길이 만큼 0으로 채워준다. (무게가 0인 트럭들이 있다고 생각한다.)
2. truck_weights를 순회하면서 아래와 같은 일을 진행한다.

  • 현재 다리위에 있는 트럭의 무게합 (truckSum) 에서 첫 번째 트럭을 빼고 다리 바로 앞에 대기하고 있는 트럭 (cur)무게를 더했을 때 무게 제한 (wegiht)보다
  • 경우에는 계속해서 다리의 첫 번째 트럭을 빼고, 무게가 0인 트럭을 계속해서 넣어준다고 생각한다. 그리고 시간을 계속해서 1초씩 증가시킨다.(answer++)
  • 작거나 같은 경우에는 첫 번째 트럭을 빼고, 다리 바로 앞에 대기하고 있는 트럭을 다리를 건너가도록 한다. 그리고 1초를 증가한다.(answer++)
  • 트럭을 빼고, 넣는 과정은 트럭이 한 칸씩 다리를 건너가는 과정이라고 생각하면 이해하기 쉬울 것이다.

+) 다른 분의 풀이를 봤을 때, truck과 관련된 클래스를 생성하여 트럭의 이동 거리를 저장하여 이동 시켰다. 나의 풀이보다 훨씬 직관적으로, 객체 지향적으로도 이해하기 쉬운 코드였다. 다음 번 풀이 에는 클래스를 활용하여 물체의 속성을 더욱 쉽게 관리해봐야겠다고 생각하였다.

코드

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        Queue<Integer> bridge = new ArrayDeque();
        int truckSum = 0;
        
        for (int i = 0; i < bridge_length; i++) {
            bridge.add(0);
        }
        
        for (int i = 0; i < truck_weights.length; i++) {
            int cur = truck_weights[i];
            while (truckSum - bridge.peek() + cur > weight) {
                truckSum -= bridge.poll();
                bridge.add(0);
                answer++;
            }
            truckSum += cur - bridge.poll();
            bridge.add(cur);
            answer++;            
        }
        return answer + bridge_length;
    }
}
profile
안녕 👋 성장하고픈 개발자 💻 입니다

0개의 댓글

관련 채용 정보