๋ ์ข ๋ฅ์ ๋ถ๋ฑํธ ๊ธฐํธ โ<โ์ โ>โ๊ฐ k๊ฐ ๋์ด๋ ์์์ด A๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ถ๋ฑํธ ๊ธฐํธ ์๋ค์ ์๋ก ๋ค๋ฅธ ํ ์๋ฆฟ์ ์ซ์๋ฅผ ๋ฃ์ด์ ๋ชจ๋ ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑ์ํค๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ ์๋ ๋ถ๋ฑํธ ์์์ด A๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ์.
A โ < < < > < < > < >
๋ถ๋ฑํธ ๊ธฐํธ ์๋ค์ ๋ฃ์ ์ ์๋ ์ซ์๋ 0๋ถํฐ 9๊น์ง์ ์ ์์ด๋ฉฐ ์ ํ๋ ์ซ์๋ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์๋๋ ๋ถ๋ฑํธ ์์์ด A๋ฅผ ๋ง์กฑ์ํค๋ ํ ์์ด๋ค.
3 < 4 < 5 < 6 > 1 < 2 < 8 > 7 < 9 > 0
์ด ์ํฉ์์ ๋ถ๋ฑํธ ๊ธฐํธ๋ฅผ ์ ๊ฑฐํ ๋ค, ์ซ์๋ฅผ ๋ชจ๋ ๋ถ์ด๋ฉด ํ๋์ ์๋ฅผ ๋ง๋ค ์ ์๋๋ฐ ์ด ์๋ฅผ ์ฃผ์ด์ง ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑ์ํค๋ ์ ์๋ผ๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฃผ์ด์ง ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ ์ ์๋ ํ๋ ์ด์ ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด 3456128790 ๋ฟ๋ง ์๋๋ผ 5689023174๋ ์๋์ ๊ฐ์ด ๋ถ๋ฑํธ ๊ด๊ณ A๋ฅผ ๋ง์กฑ์ํจ๋ค.
5 < 6 < 8 < 9 > 0 < 2 < 3 > 1 < 7 > 4
์ฌ๋ฌ๋ถ์ ์ ์๋ k๊ฐ์ ๋ถ๋ฑํธ ์์๋ฅผ ๋ง์กฑํ๋ (k+1)์๋ฆฌ์ ์ ์ ์ค์์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ฐพ์์ผ ํ๋ค. ์์ ์ค๋ช ํ ๋๋ก ๊ฐ ๋ถ๋ฑํธ์ ์๋ค์ ๋ค์ด๊ฐ๋ ์ซ์๋ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }์ค์์ ์ ํํด์ผ ํ๋ฉฐ ์ ํ๋ ์ซ์๋ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค.
์ฒซ ์ค์ ๋ถ๋ฑํธ ๋ฌธ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ k๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค์๋ k๊ฐ์ ๋ถ๋ฑํธ ๊ธฐํธ๊ฐ ํ๋์ ๊ณต๋ฐฑ์ ๋๊ณ ํ ์ค์ ๋ชจ๋ ์ ์๋๋ค. k์ ๋ฒ์๋ 2 โค k โค 9 ์ด๋ค.
์ฌ๋ฌ๋ถ์ ์ ์๋ ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ k+1 ์๋ฆฌ์ ์ต๋, ์ต์ ์ ์๋ฅผ ์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๊ฐ๊ฐ ์ถ๋ ฅํด์ผ ํ๋ค. ๋จ ์๋ ์(1)๊ณผ ๊ฐ์ด ์ฒซ ์๋ฆฌ๊ฐ 0์ธ ๊ฒฝ์ฐ๋ ์ ์์ ํฌํจ๋์ด์ผ ํ๋ค. ๋ชจ๋ ์ ๋ ฅ์ ๋ต์ ํญ์ ์กด์ฌํ๋ฉฐ ์ถ๋ ฅ ์ ์๋ ํ๋์ ๋ฌธ์์ด์ด ๋๋๋ก ํด์ผ ํ๋ค.
2
< >
897
021
9
> < < < > > > < <
9567843012
1023765489
์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ 0๋ถํฐ 9๊น์ง์ ์ซ์๋ค๋ก ์กฐํฉ์ ๋ง๋ค๊ณ ,
์กฐํฉํ ์์ด์ด ์ฃผ์ด์ง ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ง ํ์ธํด๋๊ฐ๋ฉด ๋๋ค.
๋จ, ๊ฐ ์ซ์๋ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ์ค๋ณต์ ํผํด์ผ ํ๋ค.
๋๋ ๋ชจ๋ ๊ฐ๋ฅํ ์ซ์ ์กฐํฉ์ ๋ฐฑํธ๋ํน(backtracking) ๊ธฐ๋ฒ์ ํตํด ์์ฑํด๋ณด๊ณ , ์กฐ๊ฑด์ ๋ถํฉํ๋ ์์ด์ ์ฐพ์๋ด ๊ทธ ์ค ์ต๋, ์ต์๊ฐ์ ์ต์ข ์ ์ผ๋ก ๋ฐํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์, ์๊ฐ ์ด๊ณผ ๋ฌธ์ ๊ฐ ์์ง ์์๊น ์๊ฐ์ ํด ๋ณด์๋๋ฐ, ์ฌ์ฉํ ์ซ์์ ์ค๋ณต์ด ์๊ณ , k
์ ๋ฒ์๊ฐ ์ ํด์ ธ ์์ด ์์ ํ์์ ํด๋ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
import java.util.*;
public class Baekjoon_2529 {
static boolean[] visited = new boolean[10]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
static String[] num = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; // ์ฌ์ฉ ๊ฐ๋ฅํ ์ซ์
static int count; // ์
๋ ฅ๋ฐ์ ๋ถ๋ฑํธ ๊ฐ์
static String[] input; // ์
๋ ฅ๋ฐ์ ๋ถ๋ฑํธ
static ArrayList<String> result = new ArrayList<>(); // ๊ฒฐ๊ณผ ๋ฆฌ์คํธ
static void permutation(int index, String now) {
// ์์ด์ ๋ค ๋ง๋ค์์ ๊ฒฝ์ฐ
// ํ์ฌ๊น์ง ๋ง๋ ์ซ์ ์กฐํฉ now๊ฐ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ง ํ์ธ
if (index == count + 1) {
// ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
if (check(now)) {
result.add(now);
}
return;
}
// ์์ด ๋ง๋ค๊ธฐ
for (int i = 0; i < 10; i++) {
if (!visited[i]) {
visited[i] = true;
permutation(index + 1, now + num[i]);
visited[i] = false; // ๋ฐฑํธ๋ํน์ ์ํด ๋ฏธ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
}
}
}
// ๋ถ๋ฑํธ ์กฐ๊ฑด ํ์ธ
static boolean check(String temp) {
for (int i = 0; i < count; i++) {
int a = temp.charAt(i) - '0';
int b = temp.charAt(i + 1) - '0';
// ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด false ๋ฐํ
if (input[i].equals(">") && a < b) {
return false;
}
if (input[i].equals("<") && a > b) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
count = sc.nextInt(); // ๊ฐ์ ์
๋ ฅ
input = new String[count];
// ๋ถ๋ฑํธ ์
๋ ฅ
for (int i = 0; i < count; i++) {
input[i] = sc.next();
}
permutation(0, "");
System.out.println(result.get(result.size() - 1));
System.out.println(result.get(0));
sc.close();
}
}
๋ถ๋ฑํธ์ ๊ฐ์๋ฅผ count
์ ์
๋ ฅ๋ฐ๊ณ , input
๋ฐฐ์ด์ ๋ถ๋ฑํธ์ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ๋๋ค.
์์ด์ ์์ฑํด ๋๊ฐ๋ ๋ฉ์๋์ธ permutation
์ ์คํํ๋ค. permutation
๋ฉ์๋๋ ํ์ฌ๊น์ง ์ ํํ ์ซ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ index
์ ํ์ฌ๊น์ง ์ ํํ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ์ ์ฅํ๋ now
๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
ํ์ฌ ๋ฌธ์์ด now
์ ๊ธธ์ด๊ฐ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๊ธธ์ด + 1
์ด ๋ ๋๊น์ง ์์ด์ ์์ฑํด ๋๊ฐ๋ค.
์์ด์ ๋ค ๋ง๋ค์์ ๊ฒฝ์ฐ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ง ํ์ธํ๊ธฐ ์ํด check
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
check
๋ฉ์๋์์ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ถํฉํ๋ค๋ฉด, true๋ฅผ ๋ฐํํด ๊ฒฐ๊ณผ ๋ฆฌ์คํธ result
์ ํด๋น ์์ด์ ์ ์ฅํ๋ค.
๋ฐฑํธ๋ํน์ ํตํด ์ค๋ณต๋์ง ์๋ ์์ด์ ๊ณ์ ์์ฑํด ๋๊ฐ๋ฉฐ, 4~5๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํด ์กฐ๊ฑด์ ๋ถํฉํ๋ ์์ด์ result
์ ๊ณ์ํด์ ์ ์ฅํ๋ค.
์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ง๋ค์๊ธฐ ๋๋ฌธ์, result
์ ๋ง์ง๋ง ์์๊ฐ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์์ด ์ค ์ต๋๊ฐ์ด ๋๊ณ , ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ต์๊ฐ์ด ๋๋ค.
์คํธ..! DFS์๋ ๋ ๋ค๋ฅธ ์ถ์ ๊ธฐ๋ฒ(?)์ธ๊ฐ์..!