[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 37์ผ์ฐจ TIL (๋ถ๋ฑํธ)
ํ๊ทธ: 99ํด๋ฝ, PS, TIL, ๋ฐฑํธ๋ํน, ์์ ํ์, ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
๋ฌธ์
์ค๋ช
๋ถ๋ฑํธ ๊ธฐํธ๋ค์ด ์ฃผ์ด์ง๊ณ , ์๋ค์ 0 ~ 9 ์ ์ซ์๋ฅผ ํ๋ฒ์ฉ๋ง ์จ์ ๋ชจ๋ ๋ถ๋ฑํธ๋ฅผ ๋ง์กฑํ๋ ์ต๋๊ฐ, ์ต์๊ฐ์ ์ฐพ๋ ๋ฌธ์
ํ์ด
- ์
๋ ฅ : ๋ถ๋ฑํธ ๊ฐฏ์๊ฐ
k
์ด๋ฉด ํ์ํ ์ซ์๋k + 1
- ๋ก์ง :
- 0 ~ 9 ๊น์ง ์ฐจ๋ก๋๋ก dfs ๋๋ฆฐ๋ค.
- ์ด๋ ์ ํํ ์ซ์๋ ์ฌํ์ ํ์ง ์๋๋ก visited ๋ฐฐ์ด๋ก ์ถ์ ํ๋ค.
- ํ์ฌ ์ ํํ ์ซ์๋ arr ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- dfs ๋ฅผ ํธ์ถ ์ depth ๋ณ์๋ฅผ ํ๋์ฉ ๋๋ฆฌ๋ฉด์ ํ์ฌ ํ์ ๊น์ด๋ฅผ ๊ด๋ฆฌํ๋ค.
- depth == arr.length ์กฐ๊ฑด ํ์ธ :
- depth ์ ํฌ๊ธฐ๊ฐ ๋ ธ๋ ๊ฐ์ ๊ฑฐ๋ฆฌ์ด๋ฉฐ, arr.length ์ ๊ฐ์ผ๋ฉด ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ธธ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ค. ์ด ๊ฒฝ์ฐ ๋ค์ ์์ ํธ์ถ์์ ์ผ๋ก ๋๋์๊ฐ์ ๋ค์ ํญ๋ชฉ์ ํ์ ํ๋ค. (๋ฐฑํธ๋ํน)
- ์ต๋ ๊ธธ์ด ๋๋ฌ ์ arr ์ ๋ด์ ๋์๋ ์ซ์๊ฐ ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌํ๋ค. (
isValid()
)- ์กฐ๊ฑด ๋ง์กฑ ์ result ์ ๋ด์๋๋ค.
- 0 ~ 9 ๊น์ง ์ฐจ๋ก๋๋ก dfs ๋๋ฆฐ๋ค.
- ์ถ๋ ฅ : result ์ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ด๊ฐ ์๋ค.
1
result = [021, 031, 032, 041, 042, 043, 051, 052, 053, 054, 061, 062, 063, 064, 065, 071, 072, 073, 074, 075, 076, 081, 082, 083, 084, 085, 086, 087, 091, 092, 093, 094, 095, 096, 097, 098, 120, 130, 132, 140, 142, 143, 150, 152, 153, 154, 160, 162, 163, 164, 165, 170, 172, 173, 174, 175, 176, 180, 182, 183, 184, 185, 186, 187, 190, 192, 193, 194, 195, 196, 197, 198, 230, 231, 240, 241, 243, 250, 251, 253, 254, 260, 261, 263, 264, 265, 270, 271, 273, 274, 275, 276, 280, 281, 283, 284, 285, 286, 287, 290, 291, 293, 294, 295, 296, 297, 298, 340, 341, 342, 350, 351, 352, 354, 360, 361, 362, 364, 365, 370, 371, 372, 374, 375, 376, 380, 381, 382, 384, 385, 386, 387, 390, 391, 392, 394, 395, 396, 397, 398, 450, 451, 452, 453, 460, 461, 462, 463, 465, 470, 471, 472, 473, 475, 476, 480, 481, 482, 483, 485, 486, 487, 490, 491, 492, 493, 495, 496, 497, 498, 560, 561, 562, 563, 564, 570, 571, 572, 573, 574, 576, 580, 581, 582, 583, 584, 586, 587, 590, 591, 592, 593, 594, 596, 597, 598, 670, 671, 672, 673, 674, 675, 680, 681, 682, 683, 684, 685, 687, 690, 691, 692, 693, 694, 695, 697, 698, 780, 781, 782, 783, 784, 785, 786, 790, 791, 792, 793, 794, 795, 796, 798, 890, 891, 892, 893, 894, 895, 896, 897]
- ๋งจ ์(์ต์๊ฐ) ๊ณผ ๋งจ ๋ค(์ต๋๊ฐ) ์ ์ถ๋ ฅํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class Main {
static int[] arr;
static boolean[] visited = new boolean[10];
static String[] sign;
static List<String> result = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k = Integer.parseInt(br.readLine());
sign = br.readLine().split(" ");
arr = new int[k + 1];
dfs(0);
System.out.println(result.get(result.size() - 1));
System.out.println(result.get(0));
}
private static void dfs(int depth) {
// ๊ธธ์ด ๋๋ฌ ์ ๋ฆฌํด
if (depth == arr.length) {
if (isValid()) { // arr ์ ํญ๋ชฉ์ด ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌ
StringBuilder sb = new StringBuilder();
for (int num : arr) {
sb.append(num);
}
result.add(sb.toString());
}
return;
}
// 0 ~ 9 ๊น์ง ํ์ํ๋ค
for (int i = 0; i <= 9; i++) {
if (!visited[i]) {
visited[i] = true; // ์ ํ ์ซ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
arr[depth] = i; // ์ ํ ์ซ์ ์ ์ฅ
dfs(depth + 1); // ์กฐ๊ฑด ๋ง์กฑ ์ ๋ค์ ์ฌ๊ธฐ๋ก ๋์์จ๋ค
visited[i] = false; // ๋ฐฑํธ๋ํน : ๋ง์ง๋ง ์๋ฆฌ์๋ฅผ ๋ค์ ๋ฐฉ๋ฌธ ํ ์ ์๋๋ก false ๋ก ๋ง๋ ๋ค
}
}
}
// ๋ถ๋ฑํธ ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ์ ์ธ์ํจ๋ค
private static boolean isValid() {
for (int i = 0; i < sign.length; i++) {
if (sign[i].equals("<")) {
if (arr[i] >= arr[i + 1]) {
return false;
}
} else if (sign[i].equals(">")) {
if (arr[i] <= arr[i + 1]) {
return false;
}
}
}
return true;
}
}
๋๊ธ๋จ๊ธฐ๊ธฐ