본문 바로가기

BOJ

백준 2529 / 부등호





순열을 먼저 만들고, 그 사이사이에 입력된 부등호를 껴놓은 후 모든 조건을 만족하면 출력하는 문제.


n개의 숫자로 모든 순열을 만들어보는 함수인


next_permutationprev_permutation이 있음을 잊고 있었다. <헤더파일은 algorithm>


next_permutation은 오름차순이기 때문에 최소값을 구할 때 쓰고,


prev_permutation은 내림차순, 최대값을 구할 때 쓰면 된다.





코드 



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
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
 
using namespace std;
 
int n;
vector<char>arr;
vector<int>big;
vector<int>small;
 
bool go(vector<int>tmp) {
    for (int i = 0; i < arr.size(); i++) {
        if (arr[i] == '<' && tmp[i] > tmp[i + 1]) {
            return false;
        }
        if (arr[i] == '>' && tmp[i] < tmp[i + 1]) {
            return false;
        }
    }
    return true;
}
int main() {
    
    cin >> n;
 
    for (int i = 0; i < n; i++) {
        char temp;
        cin >> temp;
        arr.push_back(temp);
    }
 
    for (int i = 9; i >= 9 - n; i--) {
        big.push_back(i);
    }
    for (int i = 0; i <= n; i++) {
        small.push_back(i);
    }
 
 
    do {
        if (go(big) == true) {
            for (int i = 0; i < big.size(); i++) {
                cout << big[i];
            }
            break;
        }
 
    } while (prev_permutation(big.begin(), big.end()));
 
    cout << endl;
 
    do {
        if (go(small) == true) {
            for (int i = 0; i < small.size(); i++) {
                cout << small[i];
            }
            break;
        }
 
    } while (next_permutation(small.begin(), small.end()));
 
}
cs


'BOJ' 카테고리의 다른 글

백준 14889 / 스타트와 링크  (0) 2019.01.19
백준 1339 / 단어 수학  (0) 2019.01.19
백준 6064 / 카잉 달력  (0) 2019.01.18
백준 1107 / 리모컨  (0) 2019.01.17
백준 5719 / 거의 최단 경로  (0) 2019.01.17