Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 2529 부등호 본문

Programming/BOJ

[백준/BOJ] 2529 부등호

he1fire 2020. 11. 19. 02:31
728x90

문제 : 2529 부등호

 

2529번: 부등호

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

www.acmicpc.net

부등호 기호가 나열되어있는 배열이 주어질 때,

서로 다른 한 자릿수 숫자를 넣어 만족하는 가장 큰 수와

가장 작은 수를 찾아 출력하는 문제이다.

백트래킹 기법을 활용해서 모든 경우의 수를 확인해서 비교하면 된다.


Code

#include <bits/stdc++.h>
#define ll long long
#define INF 1e15+7
using namespace std;
ll N, visited[10], mn=INF, mx=-1;
vector<char> arr;
void backtrack(ll now, ll depth){
    if (depth==N+1){
        mx=max(mx,now);
        mn=min(mn,now);
        return ;
    }
    for (int i=0;i<=9;i++){
        if (visited[i]==0){
            if (depth==0 || (arr[depth-1]=='>' && now%10>i) || (arr[depth-1]=='<' && now%10<i)){
                visited[i]=1;
                now=now*10+i;
                backtrack(now, depth+1);
                now/=10;
                visited[i]=0;
            }
        }
    }
}
int main(){
    cin >> N;
    for (int i=0;i<N;i++){
        char a;
        cin >> a;
        arr.push_back(a);
    }
    backtrack(0,0);
    cout << mx << "\n";
    if (pow(10,N)>mn)
        cout << "0";
    cout << mn;
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 1138 한 줄로 서기  (0) 2020.11.23
[백준/BOJ] 18115 카드 놓기  (1) 2020.11.20
[백준/BOJ] 2758 로또  (0) 2020.11.17
[백준/BOJ] 5972 택배 배송  (0) 2020.11.16
[백준/BOJ] 20114 미아 노트  (0) 2020.11.13
Comments