[白俊2529]不等号-Java
DFSを使用したバックグラウンドトラッキングの問題です.
初めて問題を見て、どのように各数字の不等号を比較することを知りません
But
ゆっくり見ましょう.数字0から不等号とすべての数字を比較する方式で実現すれば,容易に解決できる.
実装されたコードは以下の通りである.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.IOException;
public class Main {
static int n;
static boolean[] visited;
static String[] arr;
static List<String> list = new ArrayList<>();
static void dfs(String num, int idx) {
// 주어진 부등호의 모든 조건을 완성하면 리턴
if(idx == n+1) {
// 부등호가 성립되는 모든 경우의 수가 등록됨
list.add(num);
return;
}
// 0~9 까지의 수
for(int j = 0 ; j < 10; j++) {
// 사용한 숫자인지 체크
if(visited[j]) {
continue;
}
// Character.getNumericValue : char -> int 형으로 변환 (선택한 숫자)
// j , arr[idx-1] : 선택한 숫자에 비교할 숫자와, 비교할 부등호
if(idx == 0 || ckeck(Character.getNumericValue(num.charAt(idx - 1)), j , arr[idx-1])) {
visited[j] = true;
// true일시, num에 문자열 붙임
dfs(num+j, idx+1);
visited[j] = false;
}
}
}
static boolean ckeck(int a, int b, String c) {
// 현재 사용하는 숫자와 j번째 숫자와 비교하여, 부등호가 성립되면 true
if (c.equals(">")) {
if(a < b) return false;
} else if (c.equals("<")){
if(a > b) return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = br.readLine().split(" ");
visited = new boolean[10];
// param1 : 리턴받을 문자열, param2: 인덱스(0부터시작)
dfs("",0);
//최대값
System.out.print(list.get(list.size() - 1) + "\n");
//최소값
System.out.print(list.get(0));
}
}
Reference
この問題について([白俊2529]不等号-Java), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeokjinon/백준-2529-부등호-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol