다리를 지나는 트럭

Posted by Casval's Storage on November 4, 2020

[문제] (https://programmers.co.kr/learn/courses/30/lessons/42583)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function solution(bridge_length, weight, truck_weights) {
    var answer = 0;
    let inBridge = [];
    inBridge.sum = 0;
    let step = 0;

    do {
      step++;
      if (inBridge.length > 0 && (step - inBridge[0].step + 1) > bridge_length) {
        inBridge.sum -= inBridge[0].weight;
        inBridge.shift();
      }

      const nextWeight = truck_weights.length > 0 ? truck_weights[0] : 100000;

      if (inBridge.sum + nextWeight <= weight) {
        const truck = {
          step,
          weight: truck_weights.shift(),
        };
        inBridge.push(truck);
        inBridge.sum += truck.weight;
      }

      // console.log(inBridge, inBridge.length, 'step: ' + step);

    } while(inBridge.length > 0)

    answer = step;

    return answer;
}

두가지의 조건을 만족하는 queue를 운영하는 문제이다.

while문 중간에 step을 세는게 꼬여서 한번 실패하고 다시 정리하여 푼 문제.

회고

좋은 풀이는 맑은 머리에서 나온다. (음악틀고, 카톡하며 푸니까 이상하게 꼬였음)