문제는 이 곳 링크를 참조하길 바란다.
def solution(begin, target, words):
answer = 0
q = [begin]
while True:
tmp_q = []
for word_1 in q:
if word_1 == target:
return answer
for word_2_idx in range(len(words)-1, -1, -1):
word_2 = words[word_2_idx]
difference = sum([x != y for x, y in zip(word_1, word_2)])
if difference == 1:
tmp_q.append(words.pop(word_2_idx))
if not tmp_q:
return 0
q = tmp_q
answer += 1
문제 그대로 그래프로 구현하면 되는 문제이다. 먼저 q라는 리스트에 begin변수를 넣고 while 반복문을 실행시킨다. 그리고 for문을 실행시켜 q에 있는 원소를 word_1이라는 변수에 넣고 이 word_1 이라는 변수가 target이라면 현재 answer을 return 시킨다. 그게 아니라면 words에 있는 원소를 word_2에 넣어 zip함수를 사용하여 word_1과 word_2의 다른 단어가 몇 개인지를 비교한다. 그리고 다른단어의 갯수를 difference라는 변수에 넣고 difference가 1이라면 먼저 선언해놓은 tmp_q라는 리스트에 words를 pop하면서 append를 한다. 그리고 그 tmp_q를 q리스트에 옮긴다. 여기서 "for word_2_idx in range(len(words)-1, -1, -1)" 이렇게 리스트의 맨 끝에서 맨 앞으로 한 이유는 words에서 pop을 할때 인덱스 오류가 나지 않게 하기 위해서 이다.