https://www.acmicpc.net/problem/14381
문제
블리트릭스라는 양은 더 빨리 잠을 들기 위한 전략을 세웠다.
먼저, 숫자 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)}`);
});
'Algorithm' 카테고리의 다른 글
[Baekjoon]1835번 카드 - Javascript (0) | 2024.02.26 |
---|---|
[Baekjoon]1590번 캠프가는 영식 - Javascript (0) | 2024.02.23 |
[Baekjoon]29700번 우당탕탕 영화예매 - Javascript (0) | 2024.02.20 |
[Baekjoon]20363번 당근 키우기 - Javascript (0) | 2024.02.19 |
[Baekjoon]12927번 배수 스위치 - Javascript (0) | 2024.02.16 |