[백준 / js] 2231 분해합

알고리즘
블로그 이미지

이챙(leechaeng)

﹒2023. 8. 29.

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

예제

input: 216
output: 198

풀이

알고리즘 분류를 보니 부르트포스 알고리즘이라길래 완전탐색으로 풀었다.
처음에 2번째 for문 안에서 break 넣어줘서 틀렸었음;; ㅎ..

const input = fs.readFileSync(__dirname + '/2231_분해합.txt').toString().trim();

let num = 0;
let flag = false

for(let i = 1; i <= Number(input); i++){
  const strNum = String(i);
  let decompositionSum = 0;
  let sum = 0;

  for(let j = 0; j < strNum.length; j++){
    decompositionSum += strNum[j] * 1;
    sum = i + decompositionSum
  }

  if(input == sum) {
    num = i;
    flag = true;
    break;
  }
}

console.log(num)

input이 string이라 number로 변환해주고 input 길이만큼 for문을 순회.
만약 i가 100이면 100+1+0+0이므로 decompositionSum에 분해값(1+0+0)을 넣어주고 sum 변수에 100+(분해값)을 넣어줬다.
input값이랑 sum이 같을경우 최종결과값이 출력되므로 for문을 종료한다.

 

 

이챙(leechaeng)
이챙(leechaeng)

프론트엔드 개발도 하고 뛰기도 하고

'알고리즘' 카테고리의 관련 글