์ถ์ฒ: https://programmers.co.kr/learn/courses/30/lessons/43163
๋ ๊ฐ์ ๋จ์ด 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 ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
- ๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋ ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
- words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
- begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
- ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
์์ #1๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค.
์์ #2target์ธ "cog"๋ words ์์ ์๊ธฐ ๋๋ฌธ์ ๋ณํํ ์ ์์ต๋๋ค.
ใ .. ์ด ๋ฌธ์ ๊ฒ๋ ์ด์ํ๋ค.
์ผ๋จ ๊ณต๊ฐ๋ ํ ์คํธ์ผ์ด์ค๋ ์ฑ์ ํ ์คํธ์ผ์ด์ค ๊ธฐ์ค์ด ๋ค๋ฅด๋ค. ์ด๊ฒ ๋๋ฌธ์๋ ๊ฒ๋ ์ฝ์งํ๋ค.
๊ณต๊ฐ๋ ํ ์คํธ์ผ์ด์ค๋ ๋จ์ด๊ฐ ๋ณํํ ํ์, ์ฑ์ ํ ์คํธ์ผ์ด์ค๋ ๋จ์ด์ ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ด๊ฑฐ ์๋ชป๋์ง ์์ฒญ ์ค๋๋ ๊ฑฐ ๊ฐ์๋ฐ ํ๋จธ์ค๋ ๊ณ ์น๋ ค๋ ์๊ฐ์ด ์ ํ ์๋๋ณด๋ค ใ ใ ใ ใ ใ
์ฌํผ..
๋์ ์๊ณ ๋ฆฌ์ฆ์,
๋จผ์ begin, words์ ์๋ ๋จ์ด์ ๋ํ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , value์ ๊ทธ ๋จ์ด๊ฐ ๋ณํํ ์ ์๋ ๋ชจ๋ ๋จ์ด์ ๋ฆฌ์คํธ๋ฅผ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ bfs๋ก ๋๋ฉด์, queue๋ฅผ ์ ๋ฐ์ดํธ ํ ๋๋ง๋ค queue๋ฅผ ๋ฆฌ์คํธ๋ก ๋ณํํด์ count์ ์ด์ค๋ฆฌ์คํธ๋ก ๋ฃ๋๋ค. (depth๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํจ)
๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค ๋๋ฉด count๋ฅผ ๋๋ฉด์ target์ด ์๋์ง ์ฐพ์๋ณด๊ณ , ์์ผ๋ฉด, ๊ทธ depth์์ +1 ํด์ ๋ฆฌํดํ๋ค.
์์ผ๋ฉด 0
from collections import deque
def checkWord(begin, target):
count = 0
for i in range(len(begin)):
if begin[i] != target[i]:
count += 1
if count > 1:
return False
return True
def bfs(graph, root, target):
visited = []
count = []
queue = deque([root])
while queue:
n = queue.popleft()
if n not in visited:
visited.append(n)
# if n is None, Runtime error
if n in graph:
queue.extend(list(set(graph[n]) - set(visited)))
# count depth
count.append(list(queue))
for i in range(len(count)):
if target in count[i]:
return i + 1
return 0
def solution(begin, target, words):
answer = 0
if target not in words:
return 0
graph = {}
graph[begin] = []
#init graph
for i in words:
if checkWord(begin, i):
graph[begin].append(i)
for j in words:
if i != j and checkWord(i, j):
if i not in graph.keys():
graph[i] = []
if j not in graph.keys():
graph[j] = []
graph[i].append(j)
answer = bfs(graph, begin, target)
return answerqueue extendํ๋ ๋ถ๋ถ์์ ๊ณ์ runtime error๊ฐ ๋์ ์์ฒญ ํค๋งธ๋ค. graph[n]๋ง ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋๋๊ฒจ.. ์ค๋ ๋๋ฌด๋๋ฌด ํผ๊ณคํด์ ๋ฐ๋ก ๋ชป์ฐพ์๊ฑฐ๊ฐ๋ค;; ์ถ๊ทผํ๊ณ ๋ฐฅ๋จน๊ณ ํ์ํ๊ณ ์๊ณ ํ๋ ํ๊ณ ์๋ ค๊ณ ํผ๊ฑด๋ฐ ๋ฌธ์ ๋ ๋ง์ด ๊ฐ๊ณ ๋๋ ๋ง์ด ๊ฐ๋ฒ๋ ธ๋ค;
์ด๊ฒ ์ ์๋ฌ ๋ฌ๋๋ฉด, ์ด words๋ค์ด ์๋ก ๋๊ณ ๋์์ ๋์ค์ ์ฐจ์งํฉํ๊ณ ๋๋ฉด ๋น list๊ฐ extend๋์ด์ n ์์ฒด๊ฐ ๋น queue๊ฐ ๋๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด pop ํด๋ดค์ None์ด๊ณ ๊ทธ None์ key๋ก ๋์ ๋๋ฆฌ์ ์ ๊ทผํ๋ ค๊ณ ํ๋๊น ์๋์ง.. ์....
์ด๊ฑฐ๋๋ฌธ์ ํ ์คํธ์ผ์ด์ค 4๋ฒ ๊ณ์์์์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฌ๋ค...
์ค๋ ์ฝ์งํ์ง๋ง ์์ฆ ์๊ณ ์ ์ฌ๋ฏธ๋ถ์ฌ์ ํผ๊ณคํด๋ ์ฌ๋ฐ๋ค. ์์ด ๊ณต๋ถ๋ ์ฌ๋ฏธ ์ข ๋ถ์ผ๋ฉด ์ข๊ฒ ๋ค.