https://www.acmicpc.net/problem/16943
16943번: 숫자 재배치
두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다. 가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0
www.acmicpc.net
//[C++] 백준 문제풀이 (Bruteforcing)
#include <bits/stdc++.h>
int ret = -1;
int nums[9];
bool used[9];
// k 자리수
// flag 예를들어 3자리인 경우 모든 숫자는 x >= 100을 만족해야한다.
// 그렇지 않다면 0이 백의 자리수에 온 경우에 만들어진 숫자이기 때문이다.
int A, B, flag, k;
void dfs(int depth, int sum){
if (depth == k){
if (sum >= flag && sum < B){
ret = std::max(ret, sum);
}
return;
}
for (int i = 0; i < k; ++i){
if (used[i]) continue;
used[i] = true;
dfs(depth + 1, sum * 10 + nums[i]);
used[i] = false;
}
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> A >> B;
double a = 0.1;
while(A != 0){
nums[k] = A % 10;
flag = int(a *= 10);
A /= 10;
++k;
}
dfs(0, 0);
std::cout << ret << "\n";
return 0;
}
'백준 문제풀이 > Bruteforcing' 카테고리의 다른 글
[C++] 백준 문제풀이 (Bruteforcing) 15661번 링크와 스타트 (0) | 2023.07.02 |
---|---|
[C++] 백준 문제풀이 (Bruteforcing) 16508번 전공책 (0) | 2023.07.02 |
[C++] 백준 문제풀이 (Bruteforcing) 16922번 로마 숫자 만들기 (0) | 2023.07.01 |
[C++] 백준 문제풀이 (Bruteforcing) 16198번 에너지 모으기 (0) | 2023.07.01 |
[C++] 백준 문제풀이 (Bruteforcing) 17086번 아기 상어 2 (0) | 2023.07.01 |