백준 2529번 : 부등호

반응형

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {

    int n;
    char[] inequality;
    int[] numArray;
    boolean[] visit;

    ArrayList<String> arrayList = new ArrayList<>();
    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        inequality = new char[n];
        numArray = new int[n+1];
        visit = new boolean[10];
        for(int i=0; i<n; i++){
            inequality[i] = st.nextToken().charAt(0);
        }
        for(int i=0; i<=9; i++){
            visit[i] = true;
            numArray[0] = i;
            dfs(i, 0);
            visit[i] = false;
        }
        Collections.sort(arrayList);
        System.out.println(arrayList.get(arrayList.size()-1));
        System.out.println(arrayList.get(0));
    }

    public void dfs(int index, int depth){
        if(depth==n){
            String result = "";
            for(int a : numArray) {
                result+=a;
            }
            arrayList.add(result);
            return;
        }
        for(int i=0; i<=9; i++){
            if(!visit[i]) {
                if (inequality[depth] == 62) {
                    if (index > i) {
                        visit[i] = true;
                        numArray[depth + 1] = i;
                        dfs(i, depth + 1);
                        visit[i] = false;
                    }
                } else {
                    if (index < i) {
                        visit[i] = true;
                        numArray[depth + 1] = i;
                        dfs(i, depth + 1);
                        visit[i] = false;
                    }
                }
            }
        }
    }

    public static void main(String args[]) throws IOException {
        new Main().solution();
    }
}

DFS와 백트래킹을 활용한다. 아스키코드로 부등호를 판별하고, 조건을 만족할 경우의 인덱스 i를 int 배열에 저장 하고Depth(N) 만큼 순회한다. Depth에 도달하게 되면 int 배열을 돌아 문자로 만들어주고, 문자를 정렬하여 최소값과 최대값을 출력한다.   

 

반응형

'개발 > 알고리즘' 카테고리의 다른 글

백준 10973번 : 이전 순열  (0) 2023.01.18
백준 10972번 : 다음 순열  (0) 2023.01.18
백준 15661번 : 링크와 스타트  (0) 2023.01.16
백준 14889번 : 스타트와 링크  (0) 2023.01.16
백준 1759번 : 암호 만들기  (0) 2023.01.15