LEVEL3/단어 변환

Q·2021년 8월 18일
0

문제 설명

문제는 이 곳 링크를 참조하길 바란다.


전체 코드

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을 할때 인덱스 오류가 나지 않게 하기 위해서 이다.

profile
Data Engineer

0개의 댓글

관련 채용 정보