์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ ์ ๋ต - 06 ๋ฌด์ํ๊ฒ ํ๊ธฐ (Brute-Force ๋ธ๋ฃจํธ ํฌ์ค)
์์ : ๋ณด๊ธ ๊ฒ์ (๋ฌธ์ ID: BOGGLE, ๋์ด๋: ํ)
๋ณด๊ธ(boggle)์ 5X5 ํฌ๊ธฐ์ ์ํ๋ฒณ ๊ฒฉ์๋ฅผ ๊ฐ์ง๊ณ ํ๋ ๊ฒ์
๊ฒ์์ ๋ชฉ์ ์ ์ํ์ข์ฐ/๋๊ฐ์ ์ผ๋ก ์ธ์ ํ ์นธ๋ค์ ๊ธ์๋ค์ ์ด์ด์ ๋จ์ด๋ฅผ ์ฐพ์๋ด๋ ๊ฒ
๊ฐ ๊ธ์๋ค์ ๋๊ฐ์ ์ผ๋ก๋ ์ด์ด์ง ์ ์์ผ๋ฉฐ, ํ ๊ธ์๊ฐ ๋ ๋ฒ ์ด์ ์ฌ์ฉ๋ ์๋ ์์
๋ฌธ์ ์ดํดํ๊ณ C++๋ก ๊ตฌํ๋์ด ์๋ ์ฝ๋๋ฅผ ํ์ด์ฌ์ผ๋ก ์ ๋ณ๊ฒฝํ๋ค
๊ทธ๋๋ก ๋ณ๊ฒฝํ์ง ์๊ณ ์์์ ์ ์ฃผ์ง ์๊ณ ๋ชจ๋ ์นธ์ ๋๋ฉด์ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ์๋ค
# ๋ณด๊ธ ๊ฒ์ํ์์ ๋จ์ด๋ฅผ ์ฐพ๋ ์ฌ๊ท ํธ์ถ ์๊ณ ๋ฆฌ์ฆ
dx = [-1, -1, -1, 1, 1, 1, 0, 0]
dy = [-1, 0, 1, -1, 0, 1, -1, 1]
def hasWord(x, y, word, board):
if 0 > x or x >= len(board) or 0 > y or y >= len(board[0]):
return False
elif board[x][y] != word[0]:
return False
elif len(word) == 1:
return True
for di in range(8):
nx = x + dx[di]
ny = y + dy[di]
if hasWord(nx, ny, word[1:], board):
return True
return False
b = [['u', 'r', 'l', 'p', 'm'],
['x', 'p', 'r', 'e', 't'],
['g', 'i', 'a', 'e', 't'],
['x', 't', 'n', 'z', 'y'],
['x', 'o', 'q', 'r', 's']]
for i in range(5):
for j in range(5):
if hasWord(i, j, "pretty", b):
print("์ฐพ์๋น")
๊ทผ๋ฐ ์ด์ ์ฌ๊ธฐ์ ์ฐพ์ ๊ธ์๋ฅผ ์ถ๋ ฅํ๋๋ก ์ข ๋ ์ ๊ทธ๋ ์ด๋๋ฅผ ์์ผ๋ณด๊ณ ์ ํ๋ค
# ๋ณด๊ธ ๊ฒ์ํ์์ ๋จ์ด๋ฅผ ์ฐพ๋ ์ฌ๊ท ํธ์ถ ์๊ณ ๋ฆฌ์ฆ
import copy
dx = [-1, -1, -1, 1, 1, 1, 0, 0]
dy = [-1, 0, 1, -1, 0, 1, -1, 1]
def hasWord(x, y, word, board, mboard):
myBoard = copy.deepcopy(mboard)
if 0 > x or x >= len(board) or 0 > y or y >= len(board[0]):
return False
elif board[x][y] != word[0]:
return False
elif len(word) == 1:
myBoard[x][y] = word[0]
return myBoard
for di in range(8):
nx = x + dx[di]
ny = y + dy[di]
if k := hasWord(nx, ny, word[1:], board, myBoard):
myBoard = k
myBoard[x][y] = word[0]
return myBoard
return False
def draw(board):
for i in range(len(board)):
for j in range(len(board[i])):
print(board[i][j], end=" ")
print()
b = [['u', 'r', 'l', 'p', 'm'],
['x', 'p', 'r', 'e', 't'],
['g', 'i', 'a', 'e', 't'],
['x', 't', 'n', 'z', 'y'],
['x', 'o', 'q', 'r', 's']]
mb = [['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*']]
for i in range(5):
for j in range(5):
if k := hasWord(i, j, "pretty", b, mb):
draw(k)
print("์ฐพ์๋น")
๋ง์กฑ์ค๋ฝ๊ฒ ํ์๋ค!! ํ๊ณ ๋๋ด๋ ค๋ค๊ฐ
๋ฌธ๋ ์ฌ๋ฌ๊ฐ๊ฐ ์กด์ฌํ๋ et๋ฅผ ์ฐพ์๋ณด๊ณ ์ ํ๋๋ฐ
๊ฒฐ๊ณผ๋ ์ฐธ๋ดํ๊ฒ๋ ๋ ๊ฐ ๋ฐ์ ๋์ค์ง ์์๋ค...
17ํ์์ for๋ฌธ์ด ํ๋๋ฅผ ์ฐพ์๋ฒ๋ฆฌ๋ฉด ๊ทธ๋๋ก ํ์ถํด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ ์ฐธ์ฌ๊ฐ ์ผ์ด๋ ๊ฒ์ด๋ค
๋ฌธ์ ๋ฅผ ์ฐพ์๋๋ฐ ์ฌํ๊ฒ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ณด์ด์ง ์๋๋ค
์ด๊ฑธ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊ฒ์ธ๊ฐ...
return์ด ์๋๋ผ ๋ฆฌ์คํธ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐํ๋ ์์ผ๋ก ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋ ๊ฑฐ ๊ฐ๊ธด ํ๋ฐ.... ์ผ๋จ ํจ์ค