1
+ import java .util .*;
2
+ import java .io .*;
3
+
4
+ // 미리 κ³μ°μ νμ¬ μ£Όμ΄μ§ μ΄λ νμμ λκ° λ§μ μ’
λ₯λ₯Ό μ μ‘°ν©νμ¬ μ»μ μ μλ μ μμ μ΅λκ°
5
+ // μ£Όμ΄μ§ μ΄λ μΉΈ μλ₯Ό μ΄μ©ν΄μ μ»μ μ μλ μ μμ μ΅λκ°μ μΆλ ₯
6
+ // νλ μΉΈμ λμ°© μ μ΅λ μ΄λ νμ μ΄λνκΈ°
7
+ public class HW_μ·λμ΄_μ¬κΈ°λ¨ {
8
+ static int [] board = {0 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 , 28 , 30 , 32 , 34 , 36 , 38 , 40 ,
9
+ 13 , 16 , 19 , 22 , 24 , 28 , 27 , 26 , 25 , 30 , 35 , 0 }; // 32μΉΈ
10
+ static int [] horse = {0 , 0 , 0 , 0 }; // λ§ 4κ°
11
+ static int [][] move = new int [33 ][6 ]; // λ§μ μ΄λ κ²½λ‘ μ μ₯
12
+ static int max = 0 ;
13
+ static int [] input ;
14
+ public static void main (String [] args ) throws IOException {
15
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
16
+ StringTokenizer st = new StringTokenizer (br .readLine ());
17
+ input = new int [10 ];
18
+
19
+ for (int i =0 ; i <10 ; i ++){
20
+ input [i ] = Integer .parseInt (st .nextToken ());
21
+ }
22
+
23
+ simulation ();
24
+ dfs (0 , 0 , horse );
25
+ System .out .println (max );
26
+ }
27
+ private static void simulation (){
28
+ // μ·λμ΄ν μ΄λ κ²½λ‘ μ€μ
29
+ for (int i =0 ; i <20 ; i ++){ // μ§μ κ²½λ‘ μ΄λ μ²λ¦¬
30
+ for (int j =1 ; j <=5 ; j ++){ // μ· λμ΄ 1~5μΉΈ μ΄λ κ°λ₯
31
+ move [i ][j ] = i +j ;
32
+ }
33
+ }
34
+
35
+ // νλμΉΈ λμ°© μ μ΄λ κ²½λ‘ μ€μ
36
+ move [5 ] = new int []{0 , 21 , 22 , 23 , 29 , 30 }; // 0~5μΉΈ μ΄λ
37
+ move [10 ] = new int []{0 , 24 , 25 , 29 , 30 , 31 };
38
+ move [15 ] = new int []{0 , 26 , 27 , 28 , 29 , 30 };
39
+
40
+ // μ§μ κ²½λ‘ μ μΈ μ΄λ κ²½λ‘ μ€μ
41
+ move [21 ] = new int []{0 , 22 , 23 , 29 , 30 , 31 }; // 13~
42
+ move [22 ] = new int []{0 , 23 , 29 , 30 , 31 , 20 };
43
+ move [23 ] = new int []{0 , 29 , 30 , 31 , 20 , 32 }; // ~19
44
+
45
+ move [24 ] = new int []{0 , 25 , 29 , 30 , 31 , 20 };
46
+ move [25 ] = new int []{0 , 29 , 30 , 31 , 20 , 32 };
47
+ move [26 ] = new int []{0 , 27 , 28 , 29 , 30 , 31 };
48
+ move [27 ] = new int []{0 , 28 , 29 , 30 , 31 , 20 };
49
+ move [28 ] = new int []{0 , 29 , 30 , 31 , 20 , 32 };
50
+ move [29 ] = new int []{0 , 30 , 31 , 20 , 32 , 32 };
51
+ move [30 ] = new int []{0 , 31 , 20 , 32 , 32 , 32 };
52
+ move [31 ] = new int []{0 , 20 , 32 , 32 , 32 , 32 };
53
+
54
+ // λμ°© μ§μ κ²½λ‘ μ€μ
55
+ move [16 ][5 ] = 32 ;
56
+ move [17 ] = new int []{0 , 18 , 19 , 20 , 32 , 32 };
57
+ move [18 ] = new int []{0 , 19 , 20 , 32 , 32 , 32 };
58
+ move [19 ] = new int []{0 , 20 , 32 , 32 , 32 , 32 };
59
+ move [20 ] = new int []{0 , 32 , 32 , 32 , 32 , 32 };
60
+ }
61
+ static void dfs (int moveCnt , int score , int [] horse ){
62
+ if (moveCnt ==10 ){ // 10λ² μ΄λ μλ£ μ
63
+ max = Math .max (max , score );
64
+ return ;
65
+ }
66
+ for (int i =0 ; i <4 ; i ++){
67
+ int cur = horse [i ];
68
+ if (cur ==32 ){ // λμ°©νλ©΄ μμ§μ΄μ§μμ
69
+ continue ;
70
+ }
71
+ int next = move [cur ][input [moveCnt ]]; // λ€μ μμΉ κ³μ°
72
+ boolean flag = true ;
73
+ for (int j =0 ; j <4 ; j ++){ // κ²ΉμΉμ§ μμμΌν¨
74
+ if (i !=j && horse [j ]==next && next !=32 ){ // λμ°©μ μμ§μ΄μ§ μμ
75
+ flag = false ;
76
+ break ;
77
+ }
78
+ }
79
+ if (!flag ){
80
+ continue ;
81
+ }
82
+ horse [i ] = next ; // λ§ μ΄λ
83
+ dfs (moveCnt +1 , score +board [next ], horse );
84
+ horse [i ] = cur ; // μν 볡μ?
85
+ }
86
+
87
+ }
88
+ }
0 commit comments