[백준1094_자바스크립트(javascript)] - 막대기

경이·2024년 10월 5일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
203/325

🔴 문제

막대기


🟡 Sol

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 변수를 초기화 해줬다.
그 후 sumx보다 클 경우 문제에서 주어진 과정을 반복해야 하기 때문에 while문의 조건으로 넣어주었다.
가장 작은스틱 즉 스틱 배열의 마지막 요소를 빼서 반으로 나눠주고 sum을 다시 구해준다.

그 후 sum과 반으로 나눈 current를 더했을 때 목표값 x보다 크다면 절반으로 나눈 current 하나만 스틱 배열에 넣어주고 나머지 하나는 버려준다.
만약 목표 값보다 작으면 반으로 나눈 두개 다 스틱 배열에 넣어주면 된다.
반복이 끝나기 전 합곌흘 다시 구해 반복문의 조건이 올바르게 작동할 수 있도록 한다.


🔵 Ref

profile
록타르오가르

0개의 댓글