๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค. 2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด begin์ด "hit", target๊ฐ "cog", words๊ฐ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์ ๊ฐ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต์ ๋ช ๋จ๊ณ์ ๊ณผ์ ์ ๊ฑฐ์ณ begin์ target์ผ๋ก ๋ณํํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
def solution(begin, target, words):
answer = len(words)
depth = -1
if target not in words:
return 0
def dfs(begin, words, depth,answer):
depth += 1
nextWords = []
if begin == target:
if depth <= answer:
answer = depth
return answer
for word in words:
count = 0
for index, char in enumerate(word):
if begin[index] != char:
count += 1
if count == 1:
nextWords.append(word)
newSearchWords = words[:]
if begin in newSearchWords:
newSearchWords.remove(begin)
for begin in nextWords:
answer = dfs(begin, newSearchWords, depth,answer)
return answer
answer = dfs(begin, words, depth,answer)
return answer
๋ฌธ์ ์ ํต์ฌ:
ํ๋ก์ธ์ค๋ ๋ฌธ์ ์ ์ต์ ํด๋ฅผ ๊ณง๋ฐ๋ก ์ฐพ๋ ๋ฐฉ์์ด ์๋๋ผ,
์ต์ ์ ํด๋ฅผ ๊ตฌํด๊ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ณ , ๊ณ์ ์ต์ ํด๋ฅผ ๊ตํํด๊ฐ๋ ๋ฐฉ์์ด๋ค.
'๐ Python > ๐ค Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1931๋ฒ ํ์์ค ๋ฐฐ์ (0) | 2021.10.01 |
---|---|
ํ์๋ฒ(Greedy): ์ฒด์ก๋ณต (0) | 2021.09.22 |
์ฌํ๊ฒฝ๋ก: DFDํ์ด (0) | 2021.08.27 |
๋คํธ์ํฌ DFS, BFSํ์ด (0) | 2021.08.25 |
ํ๊ฒ๋๋ฒ: DFDํ์ด (0) | 2021.08.25 |