[노드JS/알고리즘] 백준 - 1747번 소수&팰린드롬

[문제]

 

1747번: 소수&팰린드롬

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,

www.acmicpc.net

[코드]

const stdin = require("fs")
  .readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
  .toString()
  .trim();
let N = Number(stdin);

const checkPrimeNum = (n) => {
  if (n === 1) return false;
  else if (n === 2) return true;
  else {
    for (let i = 2; i <= Math.floor(Math.sqrt(n)); i++) {
      if (n % i === 0) return false;
    }
    return true;
  }
};

while (true) {
  let str = String(N);
  let reversedStr = [...str].reverse().join("");
  if (str === reversedStr && checkPrimeNum(N) === true) {
    console.log(N);
    break;
  }
  N++;
}

 

checkPrimeNum 함수는 해당 수가 소수인지 아닌지를 판별한다.

 

무한 루프 안에서는 주어진 숫자 N을 문자열로 변환하여 str로 두고,

이 str을 쪼개서 반전시키고 다시 문자열로 합치는 과정이 reversedStr이다.

(예: str = '102' -> [... str]은 ['1', '0', '2']이 되고, reverse()를 하면 ['2', '0', '1']가 된다. 마지막으로 join("")을 하면 '201'이 됨)

 

두 개의 문자열이 같은지 비교하고, checkPrimeNum을 통해 해당 숫자가 소수라면 N을 출력하고 종료한다.

 

 

최대한 쉽게 풀어서 효율이 그다지 좋지 않은 거 같다.

코드는 다른 코드에 비해 짧지만, 시간이 552ms나 나왔다.. 

320x100