링크 → https://www.acmicpc.net/problem/2529
아영
package Baekjoon.java.silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class boj2529 {
static long min,max;
static String minString,maxString;
static int N;
static String[] brackets;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
brackets = new String[N];
boolean[] checked = new boolean[10];
min = 9999999999l;
max = 0;
for (int i = 0; i < N; i++) {
brackets[i] = st.nextToken();
}
String[] nums = new String[N+1];
dfs(0,checked,nums);
StringBuilder sb = new StringBuilder();
sb.append(maxString+"\\n");
sb.append(minString);
System.out.println(sb.toString());
}
public static void dfs(int idx,boolean[] checked,String[] nums){
if (idx==N+1){
String numString = String.join("",nums);
long result = Long.parseLong(numString);
if(min>result){
min = result;
minString = numString;
}
if(max<result) {
max = result;
maxString = numString;
}
return;
}
for (int i = 0; i < 10; i++) {
if(checked[i]) continue;
//가장 첫번째 요소일때는 비교할 것이 없으므로,
if(idx==0){
nums[idx] = Integer.toString(i);
}else{
int prev = Integer.parseInt(nums[idx-1]);
//prev보다 더 값이 큰 경우만 가능
if(brackets[idx-1].equals("<")){
if(prev>=i) continue;
}else if(brackets[idx-1].equals(">")){
if(prev<=i) continue;
}
nums[idx] = Integer.toString(i);
}
checked[i] = true;
dfs(idx+1,checked,nums);
checked[i] = false;
}
}
}
은영
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 baekjoon2529 {
static int K;
static boolean visit[];
static char arr[];
private static ArrayList<String> answer = new ArrayList<>();
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
K = Integer.parseInt(br.readLine());
arr = new char[K];
visit = new boolean[10];
StringTokenizer st = new StringTokenizer(br.readLine()+" ");
for (int i = 0; i < K; i++) {
arr[i] = st.nextToken().charAt(0);
}
func("",0);
Collections.sort(answer);
System.out.println(answer.get(answer.size() - 1));
System.out.println(answer.get(0));
}
private static void func(String num, int cnt) {
if(cnt==K+1) {
answer.add(num);
return;
}
for (int i = 0; i <10; i++) {
if (cnt == 0 || !visit[i]&&compare(num.charAt(num.length() - 1) - '0', i, arr[cnt - 1])) {
visit[i] = true;
func(num + i, cnt + 1);
visit[i] = false;
}
}
}
private static boolean compare(int a, int b, char c) {
if (c == '<') return a < b;
else return a > b;
}
}
건
package day_0524;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ2529 {
static int n;
static boolean[] arr;
static int[] isSelected;
static boolean[] isVisited;
static long answerMin, answerMax;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
n = Integer.parseInt(br.readLine());
stk = new StringTokenizer(br.readLine());
arr = new boolean[n];
for (int i = 0; i < n; i++) {
if (stk.nextToken().charAt(0) == '<') {
arr[i] = true;
} else {
arr[i] = false;
}
}
isSelected = new int[n+1];
isVisited = new boolean[10];
answerMin = 9999999999l;
answerMax = -9999999999l;
permu(0);
System.out.println(String.format("%0"+(n+1)+"d", answerMax));
System.out.println(String.format("%0"+(n+1)+"d", answerMin));
}
static void permu(int cnt) {
if (cnt == n + 1) {
if (calc()) {
String temp = "";
for (int i = 0; i < n + 1; i++) {
temp += Character.forDigit(isSelected[i], 10);
}
long tempLong = Long.parseLong(temp);
if (answerMin >= tempLong) {
answerMin = tempLong;
}
if (answerMax <= tempLong) {
answerMax = tempLong;
}
}
return;
}
for (int i = 0; i < 10; i++) {
if(!isVisited[i]) {
isSelected[cnt] = i;
isVisited[i] = true;
permu(cnt + 1);
isVisited[i] = false;
}
}
}
static boolean calc() {
outer: for (int i = 0; i < n; i++) {
if (arr[i]) {
if (isSelected[i] > isSelected[i + 1]) {
break outer;
}
} else {
if (isSelected[i] < isSelected[i + 1]) {
break outer;
}
}
if (i == n-1) {
return true;
}
}
return false;
}
}
용문
class BJ2529 {
private var K: Int = 0
private var arrows: [String] = []
private var selected: [Bool] = .init(repeating: false, count: 10)
private var selectedNums: [Int] = []
private var minAnswer = "10000000000"
private var maxAnswer = "-1"
func solve() {
readComponents()
calc()
printAnswer()
}
private func readComponents() {
self.K = Int(readLine()!)!
self.arrows = readLine()!.split(separator: " ").map { String($0) }
self.selectedNums = .init(repeating: 0, count: K + 1)
}
private func calc(count: Int = 0) {
if count == K + 1 {
var temp = ""
for value in selectedNums {
temp += "\\(value)"
}
if Int(minAnswer)! > Int(temp)! {
minAnswer = temp
}
if Int(maxAnswer)! < Int(temp)! {
maxAnswer = temp
}
return
}
for index in 0..<10 {
if selected[index] { continue }
selected[index] = true
selectedNums[count] = index
if count != 0 {
switch arrows[count - 1] {
case "<":
if selectedNums[count - 1] > selectedNums[count] { break }
calc(count: count + 1)
case ">":
if selectedNums[count - 1] < selectedNums[count] { break }
calc(count: count + 1)
default:
break
}
} else {
calc(count: count + 1)
}
selected[index] = false
}
}
private func printAnswer() {
print(maxAnswer)
print(minAnswer)
}
}
BJ2529().solve()