-
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 해석
접근 방법
트럭이 순서대로 다리를 건널 때 필요한 최소 시간을 계산하는 문제입니다.
매 시간마다 다리에 올라간 트럭의 개수와 트럭 하중의 합을 계산하는 것이 핵심입니다.
풀이 과정
현재 다리에 올라가있는 트럭들의 하중의 합과 현재 시간을 변수에 할당해 별도로 관리합니다.
그리고 다리를 빈 배열로 생성합니다. 이 배열에는 트럭의 하중과 해당 트럭의 경과 시간이 원소로 들어갑니다.
트럭을 순서대로 다리에 올리며 현재 시간과 다리의 상태를 갱신합니다. 이 때 일어나는 계산은 다음과 같습니다.
1. 현재 시간 갱신하기 (시간 +1)
2. 현재 다리에 있는 각 트럭들의 경과 시간을 갱신하기 (경과시간 +1)
3. 다리 맨 앞에 있는 트럭이 다리를 모두 건넜으면 다리에서 제거하기
4. 만약 새로운 트럭이 다리에 올라갈 수 있으면 다리에 추가하고, 다음 트럭 탐색하기위 과정을 마지막 트럭까지 반복합니다.
마지막 트럭이 다리를 올라간 직후에 탐색이 종료됩니다.
따라서 현재 시간에 마지막 트럭이 다리를 모두 건널 때까지의 시간을 더해 반환합니다.
전체 코드
function solution(length, weight, trucks) { let [currWeight, sec] = [0, 0]; const bridge = []; for (let i = 0; i < trucks.length; i++) { while (true) { sec++; for (let j = 0; j < bridge.length; j++) bridge[j][1]++; if (bridge[0] && bridge[0][1] > length) { currWeight -= bridge[0][0]; bridge.shift(); } if (currWeight + trucks[i] <= weight && bridge.length < length) { currWeight += trucks[i]; bridge.push([trucks[i], 1]); break; } } } return sec + length; }회고
- 어떤 값을 변수로 관리할 지에 대해 고민해보자.
'Algorithm > JavaScript' 카테고리의 다른 글
[PRO] 프로그래머스 Lv.2 소수 찾기 (Javascript) (3) 2024.11.20 [PRO] 프로그래머스 Lv.2 프로세스 (Javascript) (0) 2024.11.19 [PRO] 프로그래머스 Lv.2 전화번호 목록 (Javascript) (0) 2024.11.16 [PRO] 프로그래머스 Lv.2 게임 맵 최단 거리 (Javascript) (3) 2024.11.15 [PRO] 프로그래머스 Lv.2 롤케이크 자르기 (Javascript) (2) 2024.11.13