알고리즘 문제 해결/BOJ

[브루트 포스] BOJ 16943 숫자 재배치

jmkimmessi 2022. 2. 20. 00:00
반응형

https://www.acmicpc.net/problem/16943

 

16943번: 숫자 재배치

두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다.  가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0

www.acmicpc.net

문제 해결 알고리즘

 

숫자를 순열로 완전탐색해주고 B보다 작고 맨 앞 숫자가 0이 아닌 수중에 가장 큰 값을 출력해준다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int main(){
	int cnt = 0;
	int result = -1;
	int A, B; cin >> A >> B;
	vector<int> v;
	
	while(A != 0){
		v.push_back(A % 10);
		A/=10;
		cnt++;
	}
	
	sort(v.begin(), v.end());
	
	do{
		
		int temp_result = 0;
		if(v[cnt-1] == 0) continue;
		
		for(int i=0;i<cnt;i++){
			temp_result += v[i] * pow(10, i);
		}
		
		if(temp_result < B) result = max(result, temp_result);
		
		
	}while(next_permutation(v.begin(), v.end()));
	
	
	cout << result;
	
}
반응형