https://www.acmicpc.net/problem/16943
이 문제는 c++에 내장되어 있는 next_permutation을 사용하면 간단하게 풀 수 있는 문제입니다. A, B를 입력받고, A의 순서를 뒤바꿔서 C보다 작은 최대 수를 구하는 문제입니다. 우선적으로 A를 문자열로 입력받습니다. 그리고 next_permutation을 이용하여 순열을 하나씩 구하고 stoi함수를 통해 숫자로 파싱 시켜주고 B와 비교해서 작으면 값을 지속적으로 갱신해주는 방식으로 풀 수 있습니다.
<코드>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string input_num;
int max_num;
cin >> input_num >> max_num;
int ans = -1;
sort(input_num.begin(), input_num.end());
do
{
int c = stoi(input_num);
if (input_num[0] != '0' && c < max_num)
{
if (ans == -1 || ans < c)
{
ans = c;
}
}
} while (next_permutation(input_num.begin(), input_num.end()));
cout << ans << '\n';
}
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 17089 세 친구(c++) (0) | 2023.01.24 |
---|---|
백준 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데(c++) (4) | 2023.01.24 |
백준 16924 십자가 찾기(c++) (1) | 2023.01.23 |
백준 16936 나3곱2(c++) (0) | 2023.01.23 |
백준 16922 로마 숫자 만들기(c++) (0) | 2023.01.22 |