본문 바로가기
백준

백준 16943 숫자 재배치

by 콩순이냉장고 2020. 8. 7.

문제 URL : https://www.acmicpc.net/problem/16943

 

16943번: 숫자 재배치

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

www.acmicpc.net

 

문제 접근법:

문제 그대로 숫자를 재배치해서 나올수있는 수중에서 B이하중 가장 큰값을 만들면 되는 문제입니다.

값은 10억미만이지만 10억미만의수는 아무리커도 최대 9자리수 밖에 나오지않기때문에

9글자로 만들수있는 모든 경우의수라고 해봤자 9! 입니다. 이숫자는 대략 30만 조금 넘기때문에 충분히 만들수있습니다.

만들고나서 b보다 작은지 확인하고 결과값중에서 가장 큰값을 출력해주면 되기때문에 기본적인

next_permutaion을 사용해보라는 문제인것같습니다.

 

소스코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
 
int main()
{
    string a, b;
    cin >> a >> b;
    sort(a.begin(), a.end());//next_permutaion을 사용하기위해 미리 정렬을해줘야함
    int B = stoi(b);
    int result = -1;
    do{
        if (a[0!= '0')
        {
            int value = stoi(a);
            if (value <= B&&value > result){//b보다작고 결과들중에서 가장큰값만 저장
                result = value;
            }
        }
    } while (next_permutation(a.begin(), a.end()));
    cout << result << "\n";
}
cs

 

 

모르는점 혹은 궁근한점이있다면 언제든지 댓글을 이용해주시길 바랍니다. ㅎㅎ

'백준' 카테고리의 다른 글

백준 1411 비슷한 단어  (0) 2020.08.10
백준 10769 행복한지 슬픈지  (0) 2020.08.10
백준 1956 운동  (0) 2020.08.07
백준 11779 최소비용 구하기 2  (0) 2020.08.07
백준 2178 미로 탐색  (0) 2020.08.06