Java로 풀었을 때의 코드를 바탕으로 그대로 옮겨서 한 번 풀었고 그 다음으로 JavaScript 문법을 사용하여 코드를 줄일 수 있는 부분들을 줄여보았다. 속도는 Java 코드를 그대로 옮긴 것이 가장 빨랐고 나머지는 비슷했다. 그 후에 다른 사람의 풀이를 보다가 마음에 드는 코드를 발견했다!
const solution = (bridgeLength, weight, truckWeights) => {
const progress = [];
let i = 1;
while(true) {
progress.map((item, j) => {
if(item.end === i) progress.splice(j, 1);
});
if(progress.reduce((p, c) => p + c.weight, 0) + truckWeights[0] <= weight) {
progress.push({ end: i + bridgeLength, weight: truckWeights.shift()});
}
if(!progress.length && !truckWeights.length) break;
i += 1;
}
return i;
};
map
을 이용하면 가능하다는 것을 알게되었다. 요약하자면 다음과 같다. MDN Array.prototype.map()function solution(bridge_length, weight, truck_weights) {
const bridge = [];
let total_weight = 0;
let time = 0;
while(bridge.length || truck_weights.length){
if(bridge.length && bridge[0].pos == bridge_length) {
total_weight -= bridge.shift().weight;
}
bridge.map(item => {
item.pos++;
});
if(total_weight + truck_weights[0] <= weight){
bridge.push({
pos: 1,
weight: truck_weights[0]
});
total_weight += truck_weights.shift();
}
time++;
}
return time;
}