문제
두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다.
가능한 C 중에서 B보다 작거나 같으면서, 가장 큰 값을 구해보자. C는 0으로 시작하면 안 된다.
입력
첫째 줄에 두 정수 A와 B가 주어진다.
출력
B보다 작거나 같은 C 중에서 가장 큰 값을 출력한다. 그러한 C가 없는 경우에는 -1을 출력한다.
제한
- 1 ≤ A, B < 10^9
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
|
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void fastIO() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
char a[10], b[10];
int main() {
fastIO();
int ans = -1, len;
cin >> a >> b;
len = strlen(a);
sort(a, a + len);
do {
if (a[0] != '0') {
if (atoi(a) <= atoi(b)) {
ans = max(ans, atoi(a));
} else
break;
}
} while (next_permutation(a, a + len));
cout << ans << '\n';
return 0;
}
|
cs |
순열 함수를 이용해서 모든 경우를 탐색해서 풀었다.
시작이 0이면 안된다는 점을 주의해야 한다.
'백준 온라인 저지 (BOJ) 문제풀이' 카테고리의 다른 글
백준 온라인 저지 15991 1,2,3 더하기 6 (0) | 2020.11.24 |
---|---|
백준 온라인 저지 16195 1,2,3 더하기 9 (0) | 2020.11.24 |
백준 온라인 저지 7569 토마토 (0) | 2020.11.20 |
백준 온라인 저지 18532 특정 거리의 도시 찾기 (0) | 2020.11.20 |
백준 온라인 저지 9019 DSLR (0) | 2020.11.19 |