본문 바로가기
Coding Test/JavaScript

[Javascript] (백준 4673) 셀프 넘버

by Chaedie 2022. 6. 29.
728x90

[Javascript] (백준 4673) 셀프 넘버

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

main();

//* 로직함수
function solution() {
  let dp = [-1];
  for (let i = 0; i < 10000; i++) {
    dp[d(i + 1)] = true;
  }

  let answer = [];
  for (let i = 0; i < 10000; i++) {
    if (dp[i + 1] === undefined) {
      answer.push(i + 1);
    }
  }

  return answer.join('\n');
}

function d(n) {
  let strN = n + '';
  let answer = n;

  strN.split('').forEach((value, idx) => (answer += +value));

  return Number(answer);
}

//--------------------------------------------------------
//* 메인함수 (백준용 인풋 등 처리)
function main() {
  //* 인풋 (디폴트)
  const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
  let input = require('fs').readFileSync(filePath);
  if (input.length !== 0) {
    input = input.toString().trim().split('\n');
    //* 인풋 (커스텀)
    const n = +input;
  }

  //* 함수 콜 (고정)
  if (input.length === 0) {
    console.log(solution());
  } else {
    let answer = solution(n);
    answer = typeof answer === 'number' ? answer : answer.trim();
    console.log(answer);
  }
}

다른 사람 풀이

var check = Array(10001);
var result = "";

Array.prototype.sum = function () {
    return this.reduce(function (p, c) {
        return parseInt(p) + parseInt(c);
    });
};

function d (N) {
    N = String(N);
    return parseInt(N) + parseInt(N.split("").sum());
}

for (var i = 1; i <= 10000; i++) {
    check[d(i)] = true;
}

for (var i = 1; i <= 10000; i++) {
    if (check[i] === undefined) {
        result += String(i) + "\n";
    }
}

console.log(result.slice(0, result.length - 1));

배운 점, 느낀 점

  • “dp로 풀면되겠다.”해서 dp라고 이름지었는데, 그냥 for문 돌렸습니다.🤣
  • 다른분 풀이 보니까 어레이에 프로토타입으로 각 자리수 sum 하는걸 만드셨네요 reduce로 sum하는걸 프로토타입으로 선언해두면 편하긴 하겠네요.
  • 인풋처리를 신경안쓰고 싶은데 어떻게 안될까 싶네요. 하다하다 input처리용 main함수까지 만들기에 이르렀습니다. 허허 하루이틀 하고 그만둘거 아니니 계속 개선해야겠습니다.

댓글