[JS/알고리즘] 스택/큐 : 다리를 지나는 트럭 (프로그래머스)

2021. 2. 6. 16:05·Programming/Algorithm
목차
  1. 풀이

문제 설명

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.

예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭

0 [] [] [7,4,5,6]
1~2 [] [7] [4,5,6]
3 [7] [4] [5,6]
4 [7] [4,5] [6]
5 [7,4] [5] [6]
6~7 [7,4,5] [6] []
8 [7,4,5,6] [] []

따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.

solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

제한 조건

  • bridge_length는 1 이상 10,000 이하입니다.
  • weight는 1 이상 10,000 이하입니다.
  • truck_weights의 길이는 1 이상 10,000 이하입니다.
  • 모든 트럭의 무게는 1 이상 weight 이하입니다.

입출력 예

bridge_lengthweighttruck_weightsreturn

2 10 [7,4,5,6] 8
100 100 [10] 101
100 100 [10,10,10,10,10,10,10,10,10,10] 110

 

 

 

풀이

function solution(bridge_length, weight, truck_weights) {
    let onBridge = [];
    let result = 0;
    let arriveTime = [];
    let onBridgeWeight = 0;


    while(truck_weights.length > 0 || onBridge.length > 0){
        if(arriveTime[0] === result){          
            arriveTime.shift();
            onBridgeWeight -= onBridge[0];
            onBridge.shift();
        }
        if(onBridgeWeight + truck_weights[0] <= weight){
            onBridgeWeight += truck_weights[0];
            arriveTime.push(result + bridge_length);
            onBridge.push(truck_weights.shift());
        }   
        result ++;
    }
    return result;
}

shift가 시간복잡도를 많이 잡아먹는다고 하니 제한 시간이 빠듯한 경우는

원래 배열을 reverse하여 시간을 조금이라도 줄여보자.

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

'Programming > Algorithm' 카테고리의 다른 글

[Python/알고리즘] 힙 : 더 맵게 (프로그래머스)  (2) 2021.05.03
[JS/알고리즘] 스택/큐 : 프린터 (프로그래머스)  (0) 2021.02.14
[JS/알고리즘] 해쉬 : 베스트앨범 (프로그래머스)  (1) 2021.02.03
[JS/알고리즘] 스킬트리 (프로그래머스)  (0) 2021.01.31
[JS/알고리즘] 스택/큐 : 기능개발 (프로그래머스)  (0) 2021.01.31
  1. 풀이
'Programming/Algorithm' 카테고리의 다른 글
  • [Python/알고리즘] 힙 : 더 맵게 (프로그래머스)
  • [JS/알고리즘] 스택/큐 : 프린터 (프로그래머스)
  • [JS/알고리즘] 해쉬 : 베스트앨범 (프로그래머스)
  • [JS/알고리즘] 스킬트리 (프로그래머스)
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
    useState
    DP
    Lingory
    플러터
    포트폴리오
    useTranslation
    Python
    Redux
    탐욕법
    리액트
    flutter web
    알고리즘
    웹
    HTML
    TypeScript
    파이썬
    map
    useRef
    Firebase
    DART
    프로그래머스
    자바스크립트
    github
    링고리
    JSON
    CSS
    react
    플러터 웹
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[JS/알고리즘] 스택/큐 : 다리를 지나는 트럭 (프로그래머스)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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