[백준 알고리즘] Node.js 1769. 3의 배수

2023. 11. 20. 12:14코딩연습

1. 문제

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

 

1769번: 3의 배수

문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를

www.acmicpc.net

 

2. 풀이

나는 이런 순서로 풀었다.

  1. 입력되는 정수의 값이 한 자리 수인지 확인.
  2. 한자리 수가 아니라면 정수들의 각 자리수의 값을 더해줌.
  3. 더한 값이 한자리 수가 된다면 반복 종료.
  4. 한자리수가 되지 않았다면 한자리수가 될 때까지 각 자리수를 더함.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('').map(v => +v);
let numbers = inputs; // 원본 값을 바꾸기 싫어서 사본을 만듬.

function HowManySum() {
  let sum; // 자리수의 값을 더한 값을 표현할 변수.
  let count = 0; // 몇번이나 반복했는지

  if(inputs.length === 1){
    sum = +inputs[0]; // 한자리수라면 inputs도 하나뿐이니까
  } else {
    while(true){
      sum = numbers.reduce((acc, cur) => acc += cur, 0); // 더해주고
      count++; // 회수 증가 시켜주고

      if(sum.toString().length === 1) break; // 한자리수가 되면 반복문 종료

      numbers = sum.toString().split("").map(v => +v); // 아니라면 sum을 분해해서 numbers에 넣어줌.
      
    }
  }

  // 더한 값이 3으로 나누어 떨어지면 'YES', 아니라면 'NO'
  return {
    answer : sum % 3 === 0 ? 'YES' : 'NO',
    count : count
  }
}

console.log(`${HowManySum().count}\n${HowManySum().answer}`);

 

3. 정리

  • 3으로 나누어 떨어지는지 확인하고 답을 yes나 no로 해줄때, 모두 대문자로 돌려주지 않아서 계속 틀렸었다.......