본문 바로가기

백준14382 - 숫자세는 양 (set) node.js 본문

개발/algorithm

백준14382 - 숫자세는 양 (set) node.js

자전하는명왕성 2024. 3. 20. 09:42

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

 

문제 해결 방식

입력값 x가 존재한다고 할 때, x * i (이때 i는 1부터 계속 증가)를 구해나가며, 이 해당 값을 문자값으로 형변환하고 분할하여 set에 추가하는 방식으로 구현했다.

여기서 set은 중복된 원소를 제거하기 때문에, set의 크기가 10인 경우는 곧 0 ~ 9까지의 원소가 모두 등장한 상황이 된다.

이때는 반복문을 중단시켜 가장 마지막에 호출된 x * i 를 정답으로 출력했다.

 

입력값 x가 0인 경우는 어떤 수를 계속 곱해도 0이라 1 ~ 9까지의 원소가 등장할 수 없기 때문에, 바로 문제에서 제시된 'INSOMNIA'를 출력하면 된다.

 

전체 소스 코드

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

function solution(data) {
  const [n, ...arr] = data.map(Number);

  const result = arr.map((el, idx) => {
    return `Case #${idx + 1}: ${act(el)}`;
  });

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

function act(x) {
  if (x === 0) return "INSOMNIA";

  const set = new Set();
  let i = 1;
  let last = 0;
  while (set.size !== 10) {
    const temp = x * i;
    const split = String(temp).split("");

    split.forEach((el) => set.add(el));

    last = temp;
    i++;
  }

  return last;
}

solution(input);
Comments