
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const x = Number(fs.readFileSync(path));
function solution(x) {
const sticks = [64];
let sum = 64;
while (sum > x) {
const current = sticks.pop() / 2;
sum = sticks.reduce((pre, cur) => pre + cur, 0);
if (current + sum >= x) {
sticks.push(current);
} else {
sticks.push(current);
sticks.push(current);
}
sum = sticks.reduce((pre, cur) => pre + cur);
}
return sticks.length;
}
console.log(solution(x));
⏰ 소요한 시간 : 13분
처음 가지고 있는 스틱이 64이고, 스틱들의 합계가 64다라는 가정하에 sticks, sum 변수를 초기화 해줬다.
그 후 sum이 x보다 클 경우 문제에서 주어진 과정을 반복해야 하기 때문에 while문의 조건으로 넣어주었다.
가장 작은스틱 즉 스틱 배열의 마지막 요소를 빼서 반으로 나눠주고 sum을 다시 구해준다.
그 후 sum과 반으로 나눈 current를 더했을 때 목표값 x보다 크다면 절반으로 나눈 current 하나만 스틱 배열에 넣어주고 나머지 하나는 버려준다.
만약 목표 값보다 작으면 반으로 나눈 두개 다 스틱 배열에 넣어주면 된다.
반복이 끝나기 전 합곌흘 다시 구해 반복문의 조건이 올바르게 작동할 수 있도록 한다.