https://programmers.co.kr/learn/courses/30/lessons/43163
ref: https://moseory20.tistory.com/31
처음에 bfs로 풀었는데 4번째 테스팅을 통과 못해서 결국 다른 분의 풀이를 봤다.
내가 풀었던 것과 주요 포인트는 같았다.
다만 나는 재귀함수로 더 복잡하게 풀었고 이 분은 반복문으로 깔끔하게 풀었다.
bfs, dfs를 재귀함수로 짜면 function의 parameter를 통해 새로운 subset문제를 정의한다. 이러한 과정을 반복문에서 변수들을 통해 세팅해 줄 수 있다.
이해가 바로 가지 않았던 점은 bfs를 반복문에서 표현한 것인데 answer에 대한 증감 비교가 없는 점이었다. 왜냐하면 순서대로 탐색을 할 경우 분명 answer의 값이 다르게 나올 가능성이 있을거라 생각했기 때문이다.
아래 코드를 보면 알 수 있지만, 순차적인 비교가 아니라 한꺼번에 비교하기 때문에 이렇게 비교해도 되는 것이었다.
diff_word에 한꺼번에 모든 word를 쌓아두고 비교하기 때문에 코드가 얻은 answer는 항상 minimize된 값이다.
ref: https://moseory20.tistory.com/31
def solution(begin, target, words):
if target not in words:
return 0
answer = 0
word_len = len(begin)
word_list = [begin]
diff_word = list()
while(1):
for wl in word_list:
diff_word.clear()
for word in words:
diff = 0
for idx in range (0, word_len):
if wl[idx] != word[idx]: diff += 1
if diff > 1: break
if diff==1: # 1글자 차이
diff_word.append(word)
words.remove(word)
answer += 1
if target in diff_word: return answer
else: word_list = diff_word
return answer