1+ package `3week`.acw
2+
3+ const val king= 3
4+ const val stone= 2
5+ class 킹{
6+ lateinit var input: List <String >
7+ var chessMap= Array (8 ){Array (8 ){0 } }
8+
9+ val direction= hashMapOf<String ,Pair <Int ,Int >>(
10+ Pair (" R" ,Pair (0 ,1 )),
11+ Pair (" L" ,Pair (0 ,- 1 )),
12+ Pair (" B" ,Pair (1 ,0 )),
13+ Pair (" T" ,Pair (- 1 ,0 )),
14+ Pair (" RT" ,Pair (- 1 ,1 )),
15+ Pair (" LT" ,Pair (- 1 ,- 1 )),
16+ Pair (" RB" ,Pair (1 ,1 )),
17+ Pair (" LB" ,Pair (1 ,- 1 ))
18+ )
19+
20+
21+ fun validate (y : Int ,x : Int ):Boolean {
22+ return ! (y< 0 || x< 0 || y> 7 || x> 7 )
23+ }
24+
25+ fun solution (){
26+ input= readln().split(" " )
27+
28+ var kingX= input[0 ][0 ]- ' A'
29+ var kingY= 8 - input[0 ][1 ].digitToInt()
30+
31+ var stoneX= input[1 ][0 ]- ' A'
32+ var stoneY= 8 - input[1 ][1 ].digitToInt()
33+
34+ val N = input[2 ].toInt()
35+
36+ chessMap[kingY][kingX]= king
37+ // king
38+
39+ chessMap[stoneY][stoneX]= stone
40+ // stone
41+
42+ for ( i in 0 until N ){
43+ val mv= readln()
44+
45+ val ny= kingY+ direction[mv]!! .first
46+ val nx= kingX+ direction[mv]!! .second
47+ if (! validate(ny,nx)){
48+ continue
49+ }// 유효성 check
50+
51+ if (chessMap[ny][nx]== stone){
52+ val nsy= stoneY+ direction[mv]!! .first
53+ val nsx= stoneX+ direction[mv]!! .second
54+
55+ if (! validate(nsy,nsx)){
56+ continue
57+ }// 돌이 자리를 비켜주지 못할 때
58+ else {
59+ chessMap[stoneY][stoneX]= 0
60+ chessMap[kingY][kingX]= 0
61+
62+ chessMap[nsy][nsx]= stone
63+ chessMap[ny][nx]= king
64+
65+ kingY= ny
66+ kingX= nx
67+
68+ stoneY= nsy
69+ stoneX= nsx
70+ // 이동시켜주기
71+
72+ continue
73+ }
74+
75+ }// 가는 자리에 돌이 있을 때
76+
77+
78+ chessMap[kingY][kingX]= 0
79+ chessMap[ny][nx]= king
80+ kingY= ny
81+ kingX= nx
82+ // 아무문제 없으면 king만 이동
83+
84+ }
85+
86+
87+
88+ println (" ${(kingX+ ' A' .toInt()).toChar()}${8 - kingY} \n ${(stoneX+ ' A' .toInt()).toChar()}${8 - stoneY} " )
89+
90+ }
91+ }
92+
93+
94+ fun main (){
95+ val sol = 킹()
96+ sol.solution()
97+ }
0 commit comments