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

Yujin·2025년 6월 18일

CodingTest

목록 보기
10/51

문제

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

문제풀이 방법

  1. 처음 queue 값을 모두 0으로 초기화 한다-> 조건에 따라 poll을 하기엔 따져야하는 조건이 많아 for문을 돌때마다 항상 poll을 하기 위해서
  2. 1) 만약 현재 다리위에 있는 트럭의 무게와 새로 올라오려는 트럭의 무게를 더했을 때 다리가 견딜 수 있는 무게를 넘으면 q.add(0)을 해서 0을 넣어주면서 트럭을 뺀다
    2)더 들어갈 수 있는 경우라면 트럭을 add하여 넣어줌
  3. 항상 time은 1씩 증가
  4. 마지막에는 time에 bridge_length를 더한다 -> 마지막 요소는 항상 다리길이 만큼 시간이 걸리기 떄문이다

나의 코드

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        int time = 0;
        int sum = 0;
        Queue<Integer> q = new LinkedList<>();
        // queue의 값을 0으로 다 초기화
        for(int i = 0; i < bridge_length; i++)
            q.add(0);
        
        for(int i = 0; i < truck_weights.length; i++) {
            sum -= q.poll();
            if (sum + truck_weights[i] > weight) {
                q.add(0);
                i--;
            }else { //더 들어갈 수 있는 경우
                q.add(truck_weights[i]);
                sum += truck_weights[i];
            }
            time++;
            }
        return time + bridge_length;//마지막 요소는 항상 다리길이만큼 시간이 걸림 
        }
    }

0개의 댓글