|
| 1 | +class Solution { |
| 2 | + func exist(_ board: [[Character]], _ word: String) -> Bool { |
| 3 | + let target = Array(word) // Swift String์ ์ธ๋ฑ์ค๋ฅผ ํตํ ์ ๊ทผ์ ์ด๋ ค์์ด ์์ด, Array๋ก ๋ณํ |
| 4 | + let threshold = target.count |
| 5 | + var board = board // inout ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ณ์๋ก ๋ณํ |
| 6 | + |
| 7 | + for i in 0..<board.count { |
| 8 | + for j in 0..<board[i].count { |
| 9 | + // ๋ฐฑํธ๋ํน ์ํ ํจ์ |
| 10 | + // ์กฐ๊ฑด์ ๋ง๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋ฐ๋ก true ๋ฐํ - early return |
| 11 | + if traverse(&board, 0, i, j, threshold, target) { |
| 12 | + return true |
| 13 | + } |
| 14 | + } |
| 15 | + } |
| 16 | + |
| 17 | + // ๋ชจ๋ ์ขํ๋ฅผ ์ํํ ํ์๋ ๋งค์นญ๋๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด false ๋ฐํ |
| 18 | + return false |
| 19 | + } |
| 20 | + |
| 21 | + // threshold๋ฅผ target.count๋ก ์ฌ์ฉํ ์ ์์ผ๋, ๋งค๋ฒ ๊ณ์ฐํ์ง ์๊ธฐ ์ํด ๋ถ๋ชจ ํจ์์์ ํ ๋ฒ๋ง ๊ณ์ฐํ๊ณ ํ๋ผ๋ฏธํฐ์ ํฌํจ |
| 22 | + func traverse(_ board: inout [[Character]], _ checked: Int, _ row: Int, _ col: Int, _ threshold: Int, _ target: [Character]) -> Bool { |
| 23 | + // ์ง๊ธ๊น์ง ์ฒดํฌํ ๊ธ์ ์๊ฐ ๋จ์ด์ ์ด ๊ธ์ ์์ ๊ฐ๋ค๋ฉด, true ๋ฐํ |
| 24 | + // ์๋์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋งค์นญ๋์ง ์๋๋ค๋ฉด ๊ทธ ์ด์ ์ false๊ฐ ๋ฐํ๋์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ |
| 25 | + if checked == threshold { |
| 26 | + return true |
| 27 | + } |
| 28 | + |
| 29 | + // ํ์ฌ ์ขํ๊ฐ ๋ณด๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ฉด false ๋ฐํ |
| 30 | + guard (0..<board.count) ~= row && (0..<board[0].count) ~= col else { |
| 31 | + return false |
| 32 | + } |
| 33 | + |
| 34 | + // ํ์ฌ ์ขํ์ ๊ธ์๊ฐ ๋จ์ด์ ํ์ฌ ์ฒดํฌํด์ผ ํ ๊ธ์์ ์ผ์นํ์ง ์๋๋ค๋ฉด ๋ฐ๋ก false ๋ฐํ |
| 35 | + guard board[row][col] == target[checked] else { |
| 36 | + return false |
| 37 | + } |
| 38 | + |
| 39 | + // ๋ฐฑํธ๋ํน ์คํ
1: ํ์ฌ ์ขํ์ ๊ธ์๋ฅผ ์์ ๋ณ์์ ์ ์ฅํ๊ณ , ํ์ฌ ์ขํ์ ๊ธ์๋ฅผ "#"๋ก ๋ณ๊ฒฝ |
| 40 | + let temp = board[row][col] |
| 41 | + board[row][col] = "#" |
| 42 | + |
| 43 | + // ๋ฐฑํธ๋ํน ์คํ
2: ํ์ฌ ์ขํ์ ์ํ์ข์ฐ๋ฅผ ์ํํ๋ฉฐ, ๋งค์นญ๋๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด true ๋ฐํ |
| 44 | + let result = traverse(&board, checked + 1, row + 1, col, threshold, target) |
| 45 | + || traverse(&board, checked + 1, row - 1, col, threshold, target) |
| 46 | + || traverse(&board, checked + 1, row, col + 1, threshold, target) |
| 47 | + || traverse(&board, checked + 1, row, col - 1, threshold, target) |
| 48 | + |
| 49 | + // ๋ฐฑํธ๋ํน ์คํ
3: ํ์ฌ ์ขํ์ ๊ธ์๋ฅผ ์๋ ๊ฐ์ผ๋ก ๋ณต๊ตฌ |
| 50 | + board[row][col] = temp |
| 51 | + |
| 52 | + return result |
| 53 | + } |
| 54 | +} |
0 commit comments