ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1094. [JavaScript]막대기
    JavaScript_알고리즘/Silver V 2024. 7. 1. 17:51

    1. 문제

     

    https://www.acmicpc.net/problem/1094

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 128MB
    • 수학

     

    3. 자바스크립트 코드

     

    // 인풋
    const fs = require("fs");
    const input = parseInt(fs.readFileSync("./1094.txt").toString().trim());
    // 막대길이 64
    let bar = 64;
    // 자른 막대 저장 리스트
    let barList = [];
    // 총 길이 체크
    let total = 0;
    // 몇개 사용했는지 체크
    let count = 0;
    if (input === bar) {
      // 막대가 64이고 X값이 64인 경우 1개의 막대만 사용
      console.log(count + 1);
    } else {
      // 외의 경우 막대가 1이 나올때 까지 분리
      while (bar > 1) {
        // check 변수를 통해서 X 보다 작은 막대를 다 저장
        const check = bar / 2;
        if (check <= input) {
          barList.push(check);
        }
        bar /= 2;
      }
      //   저장된 막대를 더하고 빼면서 몇개를 사용했는지 체크
      for (bar of barList) {
        total += bar;
        count += 1;
        if (total > input) {
          total -= bar;
          count -= 1;
        } else if (total == input) {
          console.log(count);
          break;
        }
      }
    }

     

    4. 문제를 풀고난 후 생각

     

    • 막대기를 반으로 나누면서 X라는 목표의 막대기보다 작은 경우 리스트에 값을 추가한 후 반복문을 통해서 막대기 길이를 더해서 X값이랑 같은지 체크해준다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 수학

    댓글

Designed by Tistory.