문제링크 : https://www.acmicpc.net/problem/2529
import java.io.*;
import java.util.StringTokenizer;
public class BOJ2529 {
static StringBuilder sb = new StringBuilder(); //제출답안
static FastReader scan = new FastReader();
static int N;
static double maxValue, minValue;
static int[] isUsed, selected;
static String[] simbols;
static String maxString, minString;
public static void input() {
N = scan.nextInt();
simbols = new String[N];
for(int i =0; i < N; i++) {
simbols[i] = scan.next();
}
}
public static void main(String[] args) {
input();
maxValue = Double.MIN_VALUE;
minValue = Double.MAX_VALUE;
isUsed = new int[10];
selected = new int[N+1];
recFunc(0);
System.out.println(maxString);
System.out.println(minString);
}
//문자를 숫자로 바꿔서 비교후 원래 문자를 사용하는 부분이.. 조금 더 깔끔하게 할 수 있을것같다.
public static void recFunc(int k) {
if(k == N+1) {
for(int i =0; i < N; i++) {
if(simbols[i].equals(">")) {
if(!(selected[i] > selected[i+1])) {
//부등호 만족하지않으면 취소
return;
}
}else if(simbols[i].equals("<")) {
if(!(selected[i] < selected[i+1])) {
//부등호 만족하지않으면 취소
return;
}
}
}
//숫자를 이어붙일 문자
String value = "";
for(int i =0; i < N+1; i++) {
value += String.valueOf(selected[i]);
}
//문자 -> 숫자 로해서 크기비교
Double finalValue = Double.parseDouble(value);
if(finalValue > maxValue) {
maxValue = finalValue;
maxString = value;
}
if(finalValue < minValue) {
minValue = finalValue;
minString = value;
}
} else {
for(int i =0; i<10; i++) {
if(isUsed[i] == 1) {
continue;
}
isUsed[i] = 1;
selected[k] = i;
recFunc(k+1);
isUsed[i] = 0;
selected[k] = 0;
}
}
}
/*
*
*류호석 강사님 입력 템플릿
*
*/
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘' 카테고리의 다른 글
JAVA 백준1015 수열 정렬(BOJ1015) (0) | 2022.03.13 |
---|---|
JAVA 백준2751 수 정렬하기2(BOJ2751)(cpu 초당 연산속도) (0) | 2022.03.12 |
JAVA 백준2750 수 정렬하기(BOJ2750) (0) | 2022.03.12 |
JAVA 백준10825 국영수(BOJ10825) (0) | 2022.03.12 |
JAVA 백준1987 알파벳(BOJ1987) (0) | 2022.03.12 |