🕊 Link

Lv2. 다리를 지나는 트럭 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42583

🧑🏻‍💻 Code(javascript)

function solution(bridge_length, weight, truck_weights) {
  if (truck_weights.length == 1) {
    return bridge_length + 1;
  }
  let second = 0;
  let bridge = new Array(bridge_length).fill(0);
  while (bridge.length) {
    second++;
    bridge.shift();
    if (truck_weights.length) {
      const sumOfBridge = bridge.reduce((acc, val) => acc + val, 0);
      if (sumOfBridge + truck_weights[0] <= weight) {
        bridge.push(truck_weights.shift());
      } else {
        bridge.push(0);
      }
    }
  }
  return second;
}

💡 Solution

function solution(bridge_length, weight, truck_weights) {
  // 트럭이 1대 일 경우
  if (truck_weights.length == 1) {
    return bridge_length + 1;
  }
  // 
  let second = 0;
  // 0으로 채운 다리 길이의 배열 생성
  let bridge = new Array(bridge_length).fill(0);
  while (bridge.length) {
    second++;
    bridge.shift(); // bridge 맨 앞 트럭을 제거
    if (truck_weights.length) {
    // 건너지 않은 트럭이 남아 있을 경우
      const sumOfBridge = bridge.reduce((acc, val) => acc + val, 0);
      // reduce를 활용해서 다리 위의 트럭 무게 합을 구함
      if (sumOfBridge + truck_weights[0] <= weight) {
        // 다리 위 트럭의 무게 + 건너지 않은 트럭 대기열의 첫번쨰 트럭 무게
        // 위 무게가 다리가 버틸수 있는 무게보다 작거나 같으면        
        bridge.push(truck_weights.shift());
        // 대기열 첫번째 트럭을 shift한 값을 다리위에 push
      } else {
        // 그렇지 않은 경우 0을 push
        bridge.push(0);
      }
    }
    // 트럭이 남아있지 않을 경우 push되는 값은 없고 bridge.length는 줄어듦.
  }
  return second;
}

👨🏻‍💻💭 Self Feedback

많이 돌아갔다가 결국 다시 리팩토링.
array를 만든다고 공간 복잡도 문제를 너무 심각하게 받아들이지 않도록 해야겠다.
결국은 시간 복잡도가 문제.


  • 2021.04.17 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글