본문 바로가기
Algorithm/백준

[실버1] 2529

by sangyunpark 2023. 9. 7.

풀이 순서

1. dfs를 활용해서 숫자 하나씩 탐색

부등호결과와 자릿수를 만족시키면 answer ArrayList에 값 추가

ArrayList의 크기가 같으므로 문자열로 비교해도 됨

 

 

2. 추가한 값을 정렬해서 최솟값, 최댓값 출력

 

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

public class Main {
    public static int k;
    public static char[] signs;
    public static int[] visited = new int[10];
    public static ArrayList<String> answer = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);

        k = sc.nextInt();
        signs = new char[k];

        for (int i = 0; i < k; i++) {
            signs[i] = sc.next().charAt(0);
        }

        dfs(0, "");

        Collections.sort(answer); // 정렬

        System.out.println(answer.get(answer.size()-1));
        System.out.println(answer.get(0));
    }

    public static boolean check(char x, char y, char op){

        if(x < y && op == '<') return true;
        return x > y && op == '>';
    }

    // 10팩토리얼 : 360만
    // 완전 탐색은 인덱스가 기준
    public static void dfs(int idx, String num){
        if(idx == k+1){
            answer.add(num);
            return;
        }

        for (int i = 0; i <=9; i++) {
            if(visited[i] > 0) continue;
            if(idx == 0 || check(num.charAt(idx-1),(char)(i+'0'),signs[idx-1])){ // index가 0인 경우
                visited[i] = 1;
                dfs(idx+1, num + i);
                visited[i] = 0; // 원상복구를 해줘야한다.
            }
        }
    }
}

 

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

[백준] 골드3 15684  (0) 2023.09.12
[실버 1] 완전 이진 트리  (0) 2023.09.08
[골드4] 알파벳  (0) 2023.09.05
[플래 5] 백조의 호수  (0) 2023.09.04
[골드 4] 주난의 난  (0) 2023.09.01