[프로그래머스/Level2] 다리를 지나는 트럭 - JAVA[자바]

2025. 3. 11. 15:31·PS/프로그래머스
목차
  1. 문제 풀이
  2. 문제 풀이 - 통과

난이도 : Level 2

유형 : 큐 / 구현 / 시뮬레이션

구현 시간 : 30분

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

 

프로그래머스

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

programmers.co.kr

 

 

 

문제 풀이

우선 해당 문제는 문제에 대한 설명이 부족하다.

예제를 보면 추측이 가능한데 아래 2가지 조건을 추가해야 한다.

  1. 트럭은 1초에 1씩 전진한다.
  2. 트럭은 1초에 1대씩 다리에 올라갈 수 있다.

 

1. Queue 자료구조를 사용해서 다리 위 트럭 객체를 관리

2. currentWeight, idx, time 변수를 통해 현재 다리 위 무게, 시간, 대기 트럭의 인덱스를 관리

 

while (idx < truck_weights.length || !bridge.isEmpty()) {
    time++; // 1초 경과

 

모든 트럭이 다리 위에 올라가고, 다리 위 모든 트럭이 건넜을 경우 반복문을 종료한다.

 

 

 

if (!bridge.isEmpty() && bridge.peek()[1] == time) {
    currentWeight -= bridge.poll()[0]; // 다리를 지난 트럭 제거
}

트럭이 다리를 지나갔는지 시간을 통해 확인하고, 다리를 다 지나갔다면 즉시 무게를 차감해준다.

 

 

if (idx < truck_weights.length) {
    if (currentWeight + truck_weights[idx] <= weight && bridge.size() < bridge_length) {
        bridge.add(new int[]{truck_weights[idx], time + bridge_length}); // 트럭 추가
        currentWeight += truck_weights[idx];
        idx++;
    }
}

무게 제한을 초과하지 않는 경우에만 다리에 트럭을 추가한다.

다리에 트럭을 추가할 때, 다리의 길이만큼 현재 시간을 더해준 이유는 다리를 건너는 시간은 다리의 길이만큼 걸리기 때문

또한 다리의 길이만큼 트럭을 올릴 수 있기 때문에 해당 조건도 추가한다.

 

 

 

문제 풀이 - 통과

// 트럭은 1초에 1씩 전진한다.
// 트럭은 1초에 1대씩 다리에 올라갈 수 있다.
// 트럭은 순서대로 다리에 올라가야 한다.

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        Queue<int[]> bridge = new LinkedList<>();
        int currentWeight = 0;
        int time = 0;
        int idx = 0;
        
         while (idx < truck_weights.length || !bridge.isEmpty()) {
            time++;

            // 다리에서 나갈 트럭 확인
            if (!bridge.isEmpty() && bridge.peek()[1] == time) {
                currentWeight -= bridge.poll()[0];
            }
            
            // 트럭 추가
            if (idx < truck_weights.length) {
                if (truck_weights[idx] + currentWeight <= weight && bridge.size() < bridge_length) {
                    bridge.add(new int[]{truck_weights[idx], time + bridge_length});
                    currentWeight += truck_weights[idx];
                    idx++;
                }
            }
        }
        
        return time;
    }
}

'PS > 프로그래머스' 카테고리의 다른 글

[프로그래머스/Level2] 구명 보트 - JAVA[자바]  (2) 2025.02.09
[프로그래머스/Level3] 블록 이동하기 - JAVA[자바]  (0) 2025.01.21
[프로그래머스/Level3] 기둥과 보 설치 - JAVA[자바]  (1) 2025.01.14
[프로그래머스/Level3] 자물쇠와 열쇠 - JAVA[자바]  (0) 2025.01.14
[프로그래머스/Level2] 문자열 압축 - JAVA[자바]  (1) 2025.01.14
  1. 문제 풀이
  2. 문제 풀이 - 통과
'PS/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/Level2] 구명 보트 - JAVA[자바]
  • [프로그래머스/Level3] 블록 이동하기 - JAVA[자바]
  • [프로그래머스/Level3] 기둥과 보 설치 - JAVA[자바]
  • [프로그래머스/Level3] 자물쇠와 열쇠 - JAVA[자바]
hongjeZZ
hongjeZZ
백엔드 개발자로서의 성장 과정을 기록합니다.
  • hongjeZZ
    Hong's Dev Note
    hongjeZZ
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • Back-End (9)
        • Java (0)
        • Spring (9)
        • Docker & Kubernetes (0)
      • Database (0)
        • MySQL (0)
        • Redis (0)
        • 데이터베이스 (0)
      • CS (4)
        • 운영체제 & 네트워크 (1)
        • 아키텍쳐 & 분산시스템 (0)
      • 회고 (0)
      • PS (27)
        • 백준 (16)
        • 알고리즘 (2)
        • 프로그래머스 (9)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    dfs
    시뮬레이션
    구현
    mongodb
    Spring
    그리디
    웹소켓
    CS
    spirng boot
    문자열
    Redis
    BFS
    스택
    컴퓨터구조
    큐
    우선순위큐
    그래프 이론
    Stomp
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hongjeZZ
[프로그래머스/Level2] 다리를 지나는 트럭 - JAVA[자바]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.