

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)); 으로 작성하시면 백준에서 통과 됩니다.