본문 바로가기

백준9047 - 6174 node.js 본문

개발/algorithm

백준9047 - 6174 node.js

자전하는명왕성 2024. 4. 5. 09:50

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

 

문제 해결 방식

문제 해결 아이디어는 문제에서 제시된대로 구현하면 되는 문제라 크게 어렵지 않다. 

다만, 내림차순 정렬과 오름차순 정렬의 차이를 구한 뒤, 해당 값이 4자릿수가 아닌 경우가 나타날 수 있고 이 부분에 대한 에러처리가 온전히 되지 않으면, 시간 초과로 오답을 받을 수 있다.

(예를 들어, 초깃값이 1000 인 경우, 1000 => 999(1000 - 1) 이므로, 이 경우엔 '0999'로 수정해야 한다는 것.)

 

전체 소스 코드

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

function solution(data) {
  data.shift();

  const result = data.map((el) => act(el));
  console.log(result.join("\n"));
}

function act(str) {
  let cnt = 0;

  while (str !== "6174") {
    const arr = str.split("").map(Number);
    const [max, min] = [
      sortArrayToOrder(arr, false),
      sortArrayToOrder(arr, true),
    ];

    const temp = String(max - min).padStart(4, "0");
    str = temp;
    cnt++;
    if (str === "6174") break;
  }

  return cnt;
}

function sortArrayToOrder(arr, order) {
  const temp = order ? arr.sort((a, b) => a - b) : arr.sort((a, b) => b - a);
  return temp.map(String).join("");
}

solution(input);
Comments