from collections import deque
def solution(begin, target, words):
def bfs(begin, cnt):
q=deque()
q.append([begin, 0])
visited=[0]* len(words)
while q:
word, cnt = q.popleft()
if word == target:
return cnt
for i in range(len(words)):
tmp_cnt=0
if not visited[i]:
for j in range(len(word)):
if word[j] !=words[i][j]:
tmp_cnt+=1
if tmp_cnt ==1:
q.append([words[i], cnt+1])
visited[i]=1
if target not in words:
return 0
else:
answer= bfs(begin, 0)
return answer
def solution(begin, target, words):
visited=[0]* len(words)
print(visited)
def dfs(b, k):
n=0
b=list(b)
res=0
while(b!=target):
for i in range(k,len(words)):
for j in range(len(words[i])):
if (visited[i]==1):
continue
if b[j]==words[i][j]:
n+=1
if n == len(words[i])-1 and visited[i]==0:
visited[i]=1
res+=1
dfs(words[i], i)
return res
answer = 0
if target not in words:
return 0
else:
answer= dfs(begin, 0)
return answer
그래서 두번째로 더 효율적인 방법을 생각해봤다.
혼자 너무 어렵게 생각했다.. 사실 간단히 해결될 문제였다. 코드도 보고 바로 이해돼서 허무했다..
심지어 굳이 list()로 문자를 안나누고 그냥 이차원 배열을 써도 한 글자씩 잘 가져오는 것을 알 수 있었다.
그리고, 나 같은 경우는 겹치는 글자가 len(word)-1와 같다면 진행하도록 했는데, 참고한 코드에서는 안겹치는 글자가 1개라면으로 구현한 것을 볼 수 있다. 처음 접근은 잘 했지만 , BFS를 어떻게 써야할지 모르겠어서 그냥 구현의 단계에서만 해결했지만, 다음에는 더 생각하고 구현해야할 것 같다.