[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 다리를 지나는 트럭

2026. 7. 29. 02:07·알고리즘 & 자료구조/문제 풀이

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 핵심

  • 트럭은 1초에 1칸씩 이동 (지문엔 명시 안 되어 있고, 예시 표로 유추해야 함)
  • 트럭 1대가 다리를 완전히 통과하는 데 정확히 bridge_length초 소요
  • 다리 위 트럭들의 무게 합이 weight를 넘으면 안 됨 (대기 중인 트럭 무게는 무시)

풀이 전략

  • 큐 2개로 관리: waitingQ(아직 다리에 안 오른 트럭), bridgeQ(현재 다리 위 트럭, {진입시각, 무게} 저장)
  • time을 1씩 증가시키며 매초 두 단계를 순서대로 체크
    1. 내리기: bridgeQ 맨 앞 트럭의 진입시각 + bridge_length == time이면 다리에서 빼고 무게 차감
    2. 태우기: waitingQ 맨 앞 트럭을 태워도 totalWeight + 무게 <= weight면 태우고 무게 누적
  • waitingQ와 bridgeQ가 둘 다 빌 때까지 반복, 최종 time이 정답
import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        Queue<Integer> waitingQ = new ArrayDeque<>();
        Queue<int[]> bridgeQ = new ArrayDeque<>();
        
        for(int t : truck_weights) {
            waitingQ.add(t);
        }
        
        int time = 0;
        int totalWeight = 0;
        while(!waitingQ.isEmpty() || !bridgeQ.isEmpty()) {
            time++;
            
            if(!bridgeQ.isEmpty()) {
                int[] bridgeTruck = bridgeQ.peek();
                
                if(bridgeTruck[0] + bridge_length == time) {
                    bridgeQ.poll();
                    totalWeight -= bridgeTruck[1];
                    
                }
            }
            
            if(!waitingQ.isEmpty()) {
                int waitingTruck = waitingQ.peek();
                
                if(totalWeight + waitingTruck <= weight && bridgeQ.size() < bridge_length) {
                    waitingQ.poll();
                    bridgeQ.add(new int[] {time, waitingTruck});
                    totalWeight += waitingTruck;
                }
            }
        }
        
        return time;
    }
}

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 모음사전  (0) 2026.07.27
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 전력망을 둘로 나누기  (0) 2026.07.25
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 피로도  (0) 2026.07.12
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 카펫  (0) 2026.07.08
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 소수 찾기  (0) 2026.07.07
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 모음사전
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 전력망을 둘로 나누기
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 피로도
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 카펫
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (80) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (43) N
        • 내용 정리 (2)
        • 문제 풀이 (41) N
      • 데이터베이스 (32)
        • 내용 정리 (1)
        • 문제 풀이 (31)
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    AVG
    깊이/너비 우선 탐색(DFS/BFS)
    프로그래머스 알고리즘 고득점 kit
    유니온파인드
    SQL
    bfs
    IFNULL
    coalesce
    이분탐색
    Round
    SUBSTR
    코테
    그래프
    블럭비교
    완전탐색
    Java
    dfs
    코딩테스트
    정렬
    알고리즘
    해시
    mysql
    프로그래머스
    date_format
    like
    동적계획법
    백트래킹
    DP
    코딭테스트
    분리집합
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 다리를 지나는 트럭
상단으로

티스토리툴바