알고리즘/백준
2529_부등호
베리영young
2024. 10. 26. 23:38
사용 알고리즘: 백트래킹
사용 언어: java
일단 이 문제는, 입력 받을 때 주의하자! 로직이 맞았는데 입력 처리 잘못해서 시간을 많이 날렸다ㅡㅡ
package week21;
import java.io.*;
import java.util.*;
public class Main {
static char[] arr;
static int n;
static String min = "9876543210", max = "0";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new char[n];
String[] s = br.readLine().split(" ");
for(int i=0; i<n; i++) {
arr[i] = s[i].charAt(0);
}
int[] tmp = new int[n+1];
boolean[] used = new boolean[10];
backtrack(tmp, used, 0);
System.out.println(max);
System.out.println(min);
}
private static void backtrack(int[] tmp, boolean[] used, int cnt) {
// System.out.println(cnt);
if(cnt == tmp.length) {
String cur = "";
for(int i=0; i<cnt; i++) {
cur += tmp[i];
}
String[] 비교 = {cur, min};
Arrays.sort(비교);
if(비교[0].equals(cur)) {
min = cur;
}
비교 = new String[] {cur, max};
Arrays.sort(비교);
if(비교[1].equals(cur)) {
max = cur;
}
return;
}
for(int i=0; i<10; i++) {
if(cnt==0) {
used[i] = true;
tmp[cnt] = i;
backtrack(tmp, used, 1+cnt);
used[i] = false;
continue;
}
int prev = tmp[cnt-1];
char budeng = arr[cnt-1];
if(!used[i] &&
((budeng == '<' && prev < i)
|| (budeng == '>' && prev > i))) {
used[i] = true;
tmp[cnt] = i;
backtrack(tmp, used, 1+cnt);
used[i] = false;
}
}
}
}