단어 변환 - PYTHON

J-USER·2021년 1월 28일
0

알고리즘 문제

목록 보기
8/44
post-thumbnail

문제 설명

두 개의 단어 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 합니다.

문제 풀이

먼저 문제를 살펴보면 begin의 단어에서 words에 있는 단어중 바꿀 수 있는 언어로 바꾸고 바꾼 단어에서 또 다른 언어로 바꿀 수 있는 단계로 내려가고... 그렇게 내려가다가 보면 target이 나오면 그 내려간 단계의 값을 return 하는 것으로 간단히 정리하자면,

  • begin에서 words 중 한 글자만 다른 word를 찾아서 그 word로 바꿈.
  • 이제 그 word에서 남은 words 중에 또 변경이 가능한 모든 경우의 수를 살펴봄.
  • 바뀔 수 있는 단어 중 target이 있으면 그 까지의 level을 return.
def solution(begin, target, words):
    answer = [begin]
    cnt = 0
    
    if target not in words :
        return 0
        
    while len(words) != 0 :
        for i in answer:
        	
            temp = []
            for word in words :
                word_cnt = 0
                for j in range(0,len(i)):
                    if i[j] != word[j] :
                        word_cnt +=1
                    if word_cnt > 1:
                        break;
                if word_cnt == 1:
                    temp.append(word)
                    words.remove(word)
        cnt +=1
        if target in temp :
            return cnt
        else :
            answer = temp

    
    return answer
profile
호기심많은 개발자

0개의 댓글