[프로그래머스 자바스크립트] ‘다리를 지나는 트럭’ 풀기

2025. 3. 3. 16:00·Algorithm/Programmers(JavaScript)

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

 

프로그래머스

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

programmers.co.kr

 

1. 생각

제일 헷갈렸던 부분은, 트럭 한대가 다리를 건너는 데 bridge_length초 걸린다는 사실이다. 문제에서 이 부분에 대한 설명 미흡해서 이해가 어려웠다.

 

맨 처음, truck_weights에 다리를 지난 시간을 나타내는 time 속성을 각 객체에 map을 통하여 추가해주었다.

 

그리고 truck_weights의 첫 번째 트럭을 새로 생성한 bridge 배열에 넣어주고 time 속성을 +1 해준다음, 우리가 구해줘야 하는 총 시간인 usedTime도 +1 해주었다.

 

이제 truck_weights의 트럭들을 bridge에 옮길 차례이다.

  1. bridge 제일 앞에 있는 트럭의 time이 bridge_length초 이상이면 bridge 배열에서 제거한다.
  2. 다리를 건너는 트럭들의 무게의 합 + truck_weights의 제일 앞에서 기다리고 있는 트럭 무게 ≤ weight 이며 다리에 트럭이 최대 bridge_length대 올라갈 수 있는 조건을 만족할 때 bridge 배열에 트럭을 추가시킨다.

위 작업들을 bridge 배열과 truck_weights 배열이 빌 때까지 반복한다.


2. 코드

function solution(bridge_length, weight, truck_weights) {
    // 다리에는 트럭이 최대 bridge_length대 올라갈 수 있음
    // bridge_length: 다리의 길이, 최대 몇대 올라갈 수 있는지
    // 다리는 weight 이하까지의 무게를 견딜 수 있음

    // 예시에는 bridge_length : 2, weight: 10, truck_weights: [7,4,5,6]

    // 소요된 시간(초)
    let usedTime = 0;

    // 다리 배열
    let bridge = [];

    truck_weights = truck_weights.map((element) => {
        return {
            weight: element,
            time: 0,
        }
    })

    let firstTruck = truck_weights.shift();
    bridge.push(firstTruck);
    firstTruck.time++;
    usedTime++;

    while(bridge.length > 0 || truck_weights.length > 0) {

        if (bridge.length > 0 && bridge[0].time >= bridge_length) {
            bridge.shift();
        }

        if(truck_weights.length > 0) {

            // 가장 앞에서 기다리는 트럭
            let waitingTruck = truck_weights[0]; 

            // 트럭 무게의 총합
            let truckWeightSum = 0;

            // 다리를 건너는 트럭들의 무게의 합 구하기
            if(bridge.length !== 0) {
                bridge.forEach((element) => {
                    truckWeightSum += element.weight;
                })
            }

            // 다리를 건너는 트럭들의 무게의 합 + waitingTruck.weight <= weight일 때
            // 그리고 다리에는 트럭이 최대 bridge_length대 올라갈 수 있는 조건에 부합하는지 체크
            if(truckWeightSum + waitingTruck.weight <= weight && bridge.length < bridge_length) {
                bridge.push(truck_weights.shift());
            }
        }

        bridge.forEach((element) => {
            element.time++;
        })

        usedTime++;
    }

    return usedTime;

}

 

 

고려해야 될 조건이 많아서 풀기 어려웠던 문제였던 것 같다.

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

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] ‘디스크 컨트롤러’ 풀기  (1) 2025.03.09
[프로그래머스 자바스크립트] ‘베스트앨범’ 풀어보기  (1) 2025.02.02
[프로그래머스 자바스크립트] ‘네트워크’ 풀어보기  (0) 2025.01.27
[프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기  (0) 2025.01.24
[프로그래머스 자바스크립트] ‘가장 큰 수’ 풀어보기  (0) 2025.01.20
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] ‘디스크 컨트롤러’ 풀기
  • [프로그래머스 자바스크립트] ‘베스트앨범’ 풀어보기
  • [프로그래머스 자바스크립트] ‘네트워크’ 풀어보기
  • [프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (169)
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3)
      • Fedify (3)
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    react
    알고리즘
    타입스크립트
    오블완
    음악추천
    HTML
    next.js
    KUIT
    자바스크립트
    프로그래머스 자바스크립트
    인공지능
    백준
    프론트엔드
    typescript
    시스템프로그래밍
    프롬프트 엔지니어링
    티스토리챌린지
    리액트
    javascript
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] ‘다리를 지나는 트럭’ 풀기
상단으로

티스토리툴바