문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
풀이
- 먼저 배열을 초기화하고 트럭을 한대 다리 위에 올린 상태에서 시작한다. bridge_length만큼 0이 채워진 큐는 트럭이 하나도 올라가 있지 않은 상태라고 할 수 있다.
var answer = 0; const bridge = Array(bridge_length).fill(0); let bridge_sum = truck_weights[0]; answer++; bridge.shift(); bridge.push(truck_weights.shift());
- bridge_sum은 현재 다리 위에 올려져 있는 트럭 무게의 합이다. 따라서 bridge_sum이 0보다 클 때까지 즉 트럭이 다리위에 있을 동안 계속 while문을 돌면서 시간을 세준다. 트럭 하나가 다리를 빠져나올 때마다 빠져나온 트럭의 무게를 빼주고 truck_weights 맨 앞의 트럭의 무게와 현재 다리위 트럭의 합이 weight보다 작다면 맨 앞의 트럭을 배열에서 빼준다 그렇지 않다면 0을 배열에 push 해주는데 그 이유는 새로운 트럭이 들어오진 않지만 한 칸씩 전진하는 것을 나타낸 것이다.
while(bridge_sum > 0) { answer++; bridge_sum -= bridge.shift(); if(truck_weights.length > 0 && bridge_sum + truck_weights[0] <= weight) { bridge_sum += truck_weights[0]; bridge.push(truck_weights.shift()); } else { bridge.push(0); } }
- answer를 리턴해준다.
코드
function solution(bridge_length, weight, truck_weights) {
var answer = 0;
const bridge = Array(bridge_length).fill(0);
let bridge_sum = 0;
answer++;
bridge.shift();
bridge_sum += truck_weights[0];
bridge.push(truck_weights.shift());
while(bridge_sum > 0) {
answer++;
bridge_sum -= bridge.shift();
if(truck_weights.length > 0 && bridge_sum + truck_weights[0] <= weight) {
bridge_sum += truck_weights[0];
bridge.push(truck_weights.shift());
} else {
bridge.push(0);
}
}
return answer;
}
'PS(Javascript)' 카테고리의 다른 글
[프로그래머스] Lv2 방금그곡 (0) | 2023.07.13 |
---|---|
[프로그래머스] Lv2 메뉴 리뉴얼 (0) | 2023.07.13 |
[프로그래머스] Lv2 두 큐의 합 같게 만들기 (0) | 2023.07.11 |
[프로그래머스] Lv2 프렌즈 4블록 (0) | 2023.07.11 |
[프로그래머스] Lv2 주차요금 계산 (0) | 2023.07.10 |
댓글