본문 바로가기

CodingTEST

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

반응형

프로그래머스 - [Level 2] 다리를 지나는 트럭

 

프로그래머스

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

programmers.co.kr


문제 분석

 

  • 트럭 여러 대가 강을 가로질러 가야한다.
    • 정해진 순서대로 건너야한다.
  • 다리의 길이와 다리가 견딜 수 있는 무게가 주어진다.
    • 다리의 길이 만큼 트럭이 올라올 수 있다.
    • 다리를 다 건너는데, 다리의 길이만큼의 시간이 걸린다.
  • 다리의 길이와 다리가 견딜 수 있는 무게, 그리고 트럭 리스트가 주어졌을 때 다리를 건너는데 걸리는 최소 시간을 반환해라.

 


해결 키 포인트

 

  • 스택/큐 사용
  • 다리에 더 이상 트럭이 올라갈 수 없을 경우, 큐에 0 삽입 (없는 무게)
  • 트럭이 올라갈 수 있을 때
    • 큐에 해당 트럭 무게 삽입
    • 현재 다리 위에 올라가 있는 무게 해당 무게만큼 증가
  • 큐의 길이가 다리의 길이와 동일할 경우, 큐에서 하나 빼기 (다리를 모두 건너왔음을 의미)
  • 해당 반복을 마지막 트럭이 다리 위에 올라 갔을 때까지 반복
    • 반복하면서 answer 증가
  • 반환 값 : answer + bridge_length 

코드

 

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;

        int sumWeight = 0;
        Queue<Integer> queue = new LinkedList<>();

        int index = 0;
        while(index < truck_weights.length) {
            if(queue.size()+1 > bridge_length) {
                sumWeight -= queue.poll();
            }
            if(sumWeight+truck_weights[index] > weight) {
                queue.add(0);
            }
            else {
                sumWeight += truck_weights[index];
                queue.add(truck_weights[index]);
                index++;
            }
            answer++;
        }

        return answer+bridge_length;
    }
}
반응형

'CodingTEST' 카테고리의 다른 글

[프로그래머스] 주식가격 (JAVA)  (0) 2024.02.26
[백준 2206] 벽 부수고 이동하기(JAVA)  (2) 2024.02.22
[백준 1238] 파티(JAVA)  (1) 2024.02.11
[백준 11404] 플로이드(JAVA)  (1) 2024.02.11
[백준 9663] N-Queen(JAVA)  (1) 2024.02.11