BOJ) 부등호 - 2529

동훈·2024년 11월 10일



DFS 를 사용해서 탐색하고, 백트래킹 조건으로 풀면되는 문제

ArrayList 는 String 으로 sort 해도, Integer sort 처럼 정렬이 되는 사실을 알게되었다.

조건을 어떻게 넣어야하는지 몰라서 찾아보고 문제를 풀었지만, 조금만 더 생각해보면 간단하게 풀 수있는 문제라고 생각한다. 머리 좀 쓰자 ..

package study;

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

public class B_2529 {
    static boolean  [] visited;
    static int K;
    static String [] str;
    static ArrayList <String> arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
        K = Integer.parseInt(br.readLine());
        arr = new ArrayList<>();
        str = new String[K];
        answer = new int [K+1];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < K; i++) {
            str[i] = st.nextToken();
        }
        for (int i = 0; i < 10; i++) {
            visited = new boolean[10];
            visited[i] = true;
            dfs(i, 0, i+ "");
            visited[i] = false;
        }
        Collections.sort(arr);
        System.out.println(arr.getLast());
        System.out.println(arr.getFirst());

    }
    public static void dfs(int start, int depth, String a){
        if (a.length() == K+1){
            arr.add(a);
            return;
        }
        for (int i = 0; i < 10; i++) {
            if (!visited[i]){
                if (str[depth].equals("<")){
                    if (start < i){
                        visited[i] = true;
                        dfs(i, depth + 1, a+i);
                        visited[i] = false;
                    }
                }
                else {
                    if (start > i){
                        visited[i] = true;
                        dfs(i, depth + 1, a+i);
                        visited[i] = false;
                    }
                }
            }
        }
    }
}

ps - 제가 쓰는 개발툴이 업데이트가 좀 빨라서 getLast, getFirst 함수를 사용해서 최댓값, 최솟값을 출력했는데
System.out.println(arr.get(arr.size()-1));
System.out.println(arr.get(0)); 으로 작성하시면 백준에서 통과 됩니다.

profile
성실함 한스쿱

0개의 댓글