1174번 : 줄어드는 수
문제)
음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 수라고 한다. 예를 들어, 321와 950은 줄어드는 수이고, 322와 958은 아니다.
N번째로 작은 줄어드는 수를 출력하는 프로그램을 작성하시오. 만약 그러한 수가 없을 때는 -1을 출력한다. 가장 작은 줄어드는 수가 1번째 작은 줄어드는 수이다.
입력 :
N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
출력 :
첫째 줄에 N번째 작은 줄어드는 수를 출력한다.
풀이)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// 1174. 줄어드는 수
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int n;
string bfs()
{
// 수가 너무 커지기 때문에 string으로 다루어야 한다.
queue<pair<string, int>> q;
for (int i = 0; i < 10; i++)
{
q.push(make_pair(to_string(i), i));
}
int cnt = 1;
while (!q.empty())
{
string a = q.front().first;
int b = q.front().second;
q.pop();
if (cnt == n) return a;
if (cnt > 1000000) break;
for (int i = 0; i < b; i++)
{
q.push(make_pair(a + to_string(i), i));
}
cnt++;
}
return "-1";
}
int main()
{
cin >> n;
cout << bfs();
return 0;
}
|
cs |
출처 : https://www.acmicpc.net/problem/1174
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 15723번 : n단 논법 (C++) (0) | 2023.10.19 |
---|---|
[백준] 1956번 : 운동 (C++) (0) | 2023.10.16 |
[백준] 20546번 : 🐜 기적의 매매법 🐜 (C++) (0) | 2023.10.14 |
[백준] 3067번 : Coins (C++) (0) | 2023.10.13 |
[백준] 1758번 : 알바생 강호 (C++) (0) | 2023.10.13 |