Skip to content

Commit e5cded0

Browse files
committed
word search solution
1 parent 89ad43b commit e5cded0

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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

Comments
ย (0)