호석이는 불면증에 걸렸다. 그래서 잠이 안 올 때의 민간요법 중 하나인 양 세기를 하려고 한다.
호석이는 1번 양부터 순서대로 세는 것이 재미없을 것 같아서 N의 배수 번호인 양을 세기로 하였다.
즉, 첫 번째에는 N번 양을 세고, 두 번째에는 2N번 양, … , k번째에는 kN번 양을 센다.
이렇게 숫자를 세던 호석이에게 잠은 더 오지 않고 다음과 같은 궁금증이 생겼다.
이전에 셌던 번호들의 각 자리수에서 0에서 9까지의 모든 숫자를 보는 것은 최소 몇 번 양을 센 시점일까?
예를 들어 N = 1295이라고 하자.
첫 번째로 N = 1295번 양을 센다. 현재 본 숫자는 1, 2, 5, 9이다.
두 번째로 2N = 2590번 양을 센다. 현재 본 숫자는 0, 2, 5, 9이다.
현재까지 본 숫자는 0, 1, 2, 5, 9이다.
세 번째로 3N = 3885번 양을 센다. 현재 본 숫자는 3, 5, 8이다.
현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.
네 번째로 4N = 5180번 양을 센다. 현재 본 숫자는 0, 1, 5, 8이다.
현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.
다섯 번째로 5N = 6475번 양을 센다. 현재 본 숫자는 4, 5, 6, 7이다.
현재까지 본 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9이다.
5N번 양을 세면 0에서 9까지 모든 숫자를 보게 되므로 호석이는 양 세기를 멈춘다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 N (1 ≤ N ≤ 106)이 주어진다.
[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
최소 몇 번 양을 세었을 때 이전에 봤던 숫자들의 자릿수에서 0에서 9까지의 모든 숫자를 보게 되는지 출력한다.
( 호석이는 xN번 양을 세고 있다. )
1
2
11
1295
1692
#2 90
#3 110
#4 6475
#5 5076
• 풀이
n을 입력받을때 0~9까지 자리수에 n.. 2n.. 3n.. 순으로 넣어서 Xn이 0~9를 모두 가질때 Xn을 구하는 문제이다
map에 0~9를 넣고 map에 0~9가 모두 존재하는지 체크하는 isFull 메서드와 나머지연산으로 각 자리의 숫자를 구해서
map에 넣는 연산을 했다
#include <iostream>
#include <vector>
#include <map>
using namespace std;
bool isFull(map<int, int> mmap){
for(int i = 0; i <= 9; i++){
if(mmap[i] == 0) {
return false;
}
}
return true;
}
int main () {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int test_case;
cin >> test_case;
for(int t = 1; t <= test_case; t++){
map<int, int> mmap;
int n;
cin >> n;
int tmp;
int res = 0;
while(!isFull(mmap)){
res ++;
tmp = res * n;
while(tmp > 0){
mmap[tmp % 10]++;
tmp /= 10;
}
}
cout << "#" << t << " " << res * n << '\n';
}
}
'C++ 알고리즘' 카테고리의 다른 글
1206. [S/W 문제해결 기본] 1일차 - View D3 (1) | 2024.10.14 |
---|---|
1983. 조교의 성적 매기기 D2 (3) | 2024.10.12 |
SWEA D2 1959. 두 개의 숫자열 (0) | 2024.10.12 |
SWEA D2 1961. 숫자 배열 회전 (4) | 2024.10.11 |
SWEA D2 2005 파스칼의 삼각형 (0) | 2024.10.11 |