https://www.acmicpc.net/problem/2529
2529번: 부등호
두 종류의 부등호 기호 ‘<’와 ‘>’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시
www.acmicpc.net
import java.util.*;
import java.io.*;
public class Main {
static String answer_max = "0";
static String answer_min = "9999999999";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int k;
String[] arr;
k = Integer.parseInt(br.readLine());
arr = new String[k];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < k; i++)
arr[i] = st.nextToken();
//////////////////////////////////////////////
boolean[] visited = new boolean[10];
String tmp = "";
for (int num = 0; num < 10; num++) {
visited[num] = true;
tmp += String.valueOf(num);
recursion(arr, num, 0, visited, tmp);
visited[num] = false;
tmp = tmp.substring(0, tmp.length() - 1);
}
System.out.println(answer_max);
System.out.println(answer_min);
}
public static void recursion(String[] arr, int num, int index, boolean[] visited, String tmp) {
// 종료 조건
if (index == arr.length) {
if (Double.parseDouble(answer_max) < Double.parseDouble(tmp))
answer_max = tmp;
if (Double.parseDouble(answer_min) > Double.parseDouble(tmp))
answer_min = tmp;
return;
}
if (arr[index].equals(">")) {
for (int i = num - 1; i >= 0; i--) {
if (!visited[i]) {
visited[i] = true;
tmp += String.valueOf(i);
recursion(arr, i, index + 1, visited, tmp);
visited[i] = false;
tmp = tmp.substring(0, tmp.length() - 1);
}
}
} else {
for (int i = num + 1; i <= 9; i++) {
if (!visited[i]) {
visited[i] = true;
tmp += String.valueOf(i);
recursion(arr, i, index + 1, visited, tmp);
visited[i] = false;
tmp = tmp.substring(0, tmp.length() - 1);
}
}
}
}
}
맨 처음 숫자는 아무거나 올 수 있다.
0~9
그다음 숫자부터는 전 숫자의 부등호 생각 + 방문하지 않았어야 함
*9876543210 은 Integer 21억을 넘어서 Integer.parseInt 못 쓴다
String으로 들고 다니다가 Double.parseDouble로 비교