BOJ 14382. 숫자세는 양 (Large)
🙇♀️[Silver IV] 숫자세는 양 (Large) - 14382
성능 요약
메모리: 2020 KB, 시간: 0 ms
분류
구현, 시뮬레이션
제출 일자
2024년 3월 5일 10:48:30
문제 설명
블리트릭스라는 양은 더 빨리 잠을 들기 위한 전략을 세웠다.
먼저, 숫자 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 ≤ 106.
출력
각 케이스에 대해서, 케이스 번호가 x이고 y가 정답일 때, Case #x: y라고 출력해야 한다.
🚀풀이
자릿수가 나왔는지 여부를 기록할 배열을 만들고 문제의 조건대로 풀면 됨.
자릿수 체크로 get_digit이란 함수를 만들었다.
void get_digit(int num)
{
while (num > 0)
{
cache[num % 10] = 1;
num /= 10;
}
}
그리고 자릿수가 다 나왔는지 확인하는 함수로 is_end를 만들었다.
bool is_end()
{
for (int i = 0; i < 10; ++i)
{
if (cache[i] < 1)
return false;
}
return true;
}
🚀전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int t;
int cache[10];
void get_digit(int num)
{
while (num > 0)
{
cache[num % 10] = 1;
num /= 10;
}
}
bool is_end()
{
for (int i = 0; i < 10; ++i)
{
if (cache[i] < 1)
return false;
}
return true;
}
void solve()
{
cin >> t;
for (int i = 1; i <= t; ++i)
{
int n, cnt = 1, idx = 2;
cin >> n;
while (true)
{
int temp = n * cnt;
if (n == n * 2)
{
cout << "Case #" << i << ": INSOMNIA" << '\n';
break;
}
get_digit(temp);
if (is_end() == true)
{
cout << "Case #" << i << ": " << temp << '\n';
break;
}
cnt++;
}
memset(cache, 0, sizeof(cache));
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen("input.txt", "rt", stdin);
solve();
return 0;
}