File tree Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+
3
+ // 풀이 : dfs
4
+ // 시간 :O(m * n * 4^w), 공간 :O(m * n + w)
5
+ val movePos = arrayOf(
6
+ intArrayOf(- 1 , 0 ),
7
+ intArrayOf(0 , - 1 ),
8
+ intArrayOf(1 , 0 ),
9
+ intArrayOf(0 , 1 )
10
+ )
11
+
12
+ fun exist (board : Array <CharArray >, word : String ): Boolean {
13
+ for (y in board.indices) {
14
+ for (x in board[y].indices) {
15
+ if (existDfs(
16
+ board,
17
+ Array (board.size) { BooleanArray (board[it].size) },
18
+ word,
19
+ " " ,
20
+ y,
21
+ x
22
+ )
23
+ ) {
24
+ return true
25
+ }
26
+ }
27
+ }
28
+ return false
29
+ }
30
+
31
+ private fun existDfs (
32
+ board : Array <CharArray >,
33
+ visit : Array <BooleanArray >,
34
+ findWord : String ,
35
+ currentWord : String ,
36
+ y : Int ,
37
+ x : Int
38
+ ): Boolean {
39
+ if (findWord == currentWord) return true
40
+ val findChar = findWord[currentWord.length]
41
+ if (board[y][x] == findChar) {
42
+ val newWord = currentWord + board[y][x]
43
+ visit[y][x] = true
44
+ for (pos in movePos) {
45
+ val newY = y + pos[0 ]
46
+ val newX = x + pos[1 ]
47
+ if (newY >= 0 && newX >= 0
48
+ && newY < board.size
49
+ && newX < board[newY].size
50
+ && ! visit[newY][newX]
51
+ && existDfs(
52
+ board = board,
53
+ visit = visit,
54
+ findWord = findWord,
55
+ currentWord = newWord,
56
+ y = newY,
57
+ x = newX
58
+ )
59
+ ) {
60
+ return true
61
+ }
62
+ }
63
+ visit[y][x] = false
64
+ }
65
+ return false
66
+ }
67
+ }
You can’t perform that action at this time.
0 commit comments