Algorithm

[Baekjoon]14381번 숫자세는 양 (Small) - Javascript

호밀이 2024. 2. 22. 23:51

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

 

14381번: 숫자세는 양 (Small)

예제 입출력 1번에 대해서, 2 × 0 = 0, 3 × 0 = 0 등등으로 이어지므로, 블리트릭스는 0외에는 다른 숫자를 기록할 수 없을 것이며, 따라서 영원히 잠에 들 수 없다. 예제 입출력 2번의 경우, 1, 2, 3, 4,

www.acmicpc.net

문제

블리트릭스라는 양은 더 빨리 잠을 들기 위한 전략을 세웠다.

먼저, 숫자 N을 뽑는다. 그리고 N, 2 × N, 3 × N 등을 떠올린다. 숫자를 떠올릴 때 마다, 그 숫자의 모든 자리수의 숫자들을 적어놓는데, 이미 적은 숫자는 또 적지 않는다. 0에서 9까지의 모든 숫자가 적히게 되면 잠이 든다.

블리트릭스는 N에서 시작해서 i × N 후에는 (i + 1) × N을 떠올리게 된다. 예를 들어 N = 1692 일 경우, 다음 과 같이 진행된다:

  • N = 1692. 1, 2, 6, 9가 기록된다.
  • 2N = 3384. 1, 2, 3, 4, 6, 8, 9가 기록된다.
  • 3N = 5076. 모든 수가 기록되고, 잠에 빠진다.

블리트릭스가 잠에 빠지는 수는 무엇인가? 영원히 잠에 들 수 없다면 INSOMNIA라고 출력하라.

입력

첫 번째 행은 케이스의 개수, T이다. 다음 행부터는 T개의 케이스들이 나온다. 각 케이스는 블리트릭스가 고른 하나의 숫자 N으로 구성된다.

제한

  • 1 ≤ T ≤ 100.
  • 0 ≤ N ≤ 200.

출력

각 케이스에 대해서, 케이스 번호가 x이고 y가 정답일 때, Case #x: y라고 출력해야 한다.

예제 입력 1 복사

4
0
1
2
11

예제 출력 1 복사

Case #1: INSOMNIA
Case #2: 10
Case #3: 90
Case #4: 110

 

문제풀이(1)

입력 받은 N을 한자리씩 나눠서 set에 저장하며 1회씩 카운트한다.
0 ~ 9까지 모든 숫자를 set에 저장하고, set의 size가 10이 된다면
마지막에 완료되는 수를 출력하고, 만일 영원히 될 수 없는 수라면 'INSOMNIA'을 출력한다.

const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const [testCase, ...numbers] = require("fs").readFileSync(filePath).toString().trim().split("\n").map(Number);

const check = (N) => {
  const digitsSet = new Set();

  for (let i = 1; i <= 200; i++) {
    let current = i * N;
    String(current)
      .split("")
      .forEach((digit) => digitsSet.add(digit));

    if (digitsSet.size === 10) return current;
  }

  return "INSOMNIA";
};

numbers.forEach((N, index) => {
  console.log(`Case #${index + 1}: ${check(N)}`);
});