본문 바로가기

백준4673 - 셀프 넘버 node.js 본문

개발/algorithm

백준4673 - 셀프 넘버 node.js

자전하는명왕성 2024. 1. 15. 09:44

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

문제는 문제에서 말하는 셀프넘버를 모두 구하는 문제다.

 

문제 해결 방식

문제에서 말하는 셀프 넘버인 수를 직접 구하기는 어렵단 생각이 들어, 셀프 넘버가 아닌 수를 먼저 모두 찾은 뒤, 전체 10000 이하의 자연수에서 셀프 넘버가 아닌 수를 제외하는 방식으로 로직을 구현했다.

  const table = {};

  for (let i = 1; i <= 10000; i++) {
    const str = String(i);
    let k = i;
    for (let j = 0; j < str.length; j++) {
      k += Number(str[j]);
    }
    table[k] = true;
  }

먼저 다음과 같은 로직으로, 셀프 넘버가 아닌 생성자로 만들어진 수를 구하고, 이를 셀프 넘버가 아닌 수를 남을 table 객체에 추가했다.

const result = [];

  for (let i = 1; i <= 10000; i++) {
    if (!table[i]) result.push(i);
  }

이후 아래와 같은 반복문을 순회하며, 생성자로 만들어지지 않은 수만 결괏값을 담는 배열에 추가했다.

 

전체 소스 코드

const fs = require("fs");
const input = fs
  .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt")
  .toString()
  .trim()
  .split("\n");

function solution(data) {
  const table = {};

  for (let i = 1; i <= 10000; i++) {
    const str = String(i);
    let k = i;
    for (let j = 0; j < str.length; j++) {
      k += Number(str[j]);
    }
    table[k] = true;
  }

  const result = [];

  for (let i = 1; i <= 10000; i++) {
    if (!table[i]) result.push(i);
  }

  console.log(result.join("\n"));
}

solution(input);

 

Comments