본문 바로가기

브루트 포스/브루트포스(순열)

부등호 (순열 풀이)

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

 

2529번: 부등호

여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력

www.acmicpc.net

10개의 수 중에서 K + 1개를 고른다 -> 순서를 모두 만든다 -> 부등호 검사

2 ^ 10 * 10 ! * 10 => 300억 경우의 수...

 

 6 < 8 > 7 < 9

실제로 수는 중요하지않다! --> 2 ^ 10을 없앨 수 있다 이 말..

대소 관계만 중요하다

가장 큰 수 : 9 8 7 6

가장 작은 수 : 0 1 2 3

이렇게 되면 시간 복잡도는

(k + 1) ! * (k + 1)

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
bool check(vector<int> num, vector<char> a)
{
    for (int i = 0; i < a.size(); i++)
    {
        if (a[i] == '>')
        {
            if (num[i] < num[i + 1])
                return false;
        }
 
        if (a[i] == '<')
        {
            if (num[i] > num[i + 1])
                return false;
        }
    }
    return true;
}
 
int main()
{
    int k;
    cin >> k;
    vector<char> a(k);  // 부등호를 넣는다
 
    for (int i = 0; i < k; i++)
    {
        cin >> a[i];
    }
    vector<int> small(k + 1); // 가장 작은 수
    vector<int> big(k + 1); // 가장 큰 수
 
    for (int i = 0; i <= k; i++)
    {
        small[i] = i;
        big[i] = 9 - i;
    }
 
    //모든 순열을 구할 때는 do-while문을 씀
    // 오름차순으로 가기 때문에
    // small은 next_permutation
    // big은 prev_permutation
    do {
        if (check(small, a))
            break;
    } while (next_permutation(small.begin(), small.end()));
 
    do {
        if (check(big, a))
            break;
    } while (prev_permutation(big.begin(), big.end()));
 
    for (int i = 0; i < big.size(); i++)
        cout << big[i];
    cout << '\n';
    for (int i = 0; i < small.size(); i++)
        cout << small[i];
 
    return 0;
}
cs

'브루트 포스 > 브루트포스(순열)' 카테고리의 다른 글

연산자 끼워넣기  (0) 2023.03.20
단어 수학 (중요!!)  (0) 2023.03.18
로또 (같은 문자를 포함한 순열)  (0) 2023.02.23
외판원 순회 2  (0) 2023.02.20
차이를 최대로  (0) 2023.02.15