ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 단어 변환
    [+] 알고리즘 [+] 2020. 4. 14. 19:03

     

     

    [문제 설명]

     

     

     

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

     

     

     

    [풀이 과정]

     

     

    본인은 어제 '2019 카카오 개발자 겨울 인턴십' 불량 사용자 문제를 풀다 실패했었다.

     

    이 문제가 뜯어보니 DFS를 묻는 문제였다.

     

    DFS/BFS는 언제나 어렵다. 항상 못 맞춘다. 돌이켜 보면 잘 맞춘적이 없는 것 같다.  빌어먹을 놈

     

    뭐 그래도, 자신의 약점을 발견했다는 것은 기쁜일이 아니인가?

     

    기본 문제부터 차근차근 공부해 나가야지.

     

     

    def diffone(a,b):
        cnt = 0
        for i in range(len(a)):
            if a[i] != b[i]:
                cnt += 1
            if cnt == 2:
                break    
        if cnt == 1:
            return True
        return False
    
    def solution(begin, target, words):
        if target not in words:
            return 0
        
        begin = [begin]
        answer = 0
        
        while words:
            for string in begin:
                temp = []
                for word in words:
                    if diffone(string, word):
                        temp.append(word)
                        words.remove(word)
            answer += 1
            if target in temp:
                return answer
            begin = temp[:]
        return 0

     

    문자열이 하나만 다른지 판별하는 함수를 따로 만들어 사용했다.

     

    확실히 가독성이 높아지고 보기 좋은 것같다.

     

     

     

     

     

     

     

     

     

     

     

    '[+] 알고리즘 [+]' 카테고리의 다른 글

    [Programmers] 행렬의 곱셈  (0) 2020.05.05
    [Programmers] 구명보트  (0) 2020.04.18
    [Programmers] 튜플  (0) 2020.04.10
    [Programmers] 크레인 인형뽑기 게임  (0) 2020.04.10
    [Programmers] 기능개발  (0) 2020.04.05

    댓글

Designed by Tistory.