본문 바로가기
Algorithm/DFS&BFS&백트래킹&재귀

[프로그래머스 lv3] 단어 변환

by HANNI하니 2023. 4. 22.

사용 언어 - Python3

문제 - 단어 변환

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

정답

큐를 활용한 이중 for문 (정답 맞춘 여부 X)

1. 예외처리

원하는 target 값이 words 리스트에 없는 경우, 0을 return 한다.

 

2. q = deque() 활용

q.append([begin, 0]) = q에 [시작값, 변환횟수] 형태로 입력한다.

각 원소를 x, cnt로 저장하여 while 문에서 처리

 

words 리스트에서 한 단어씩 확인하면서 x 값과 비교해준다. x[j] != word[j]

j번째 알파벳이 다른 경우, diff += 1을 해주면서 몇개의 알파벳이 다른지 저장한다.

1개의 알파벳만 다른 경우, 이동할 수 있으므로 q.append([word,cnt+1]) 해주면서 이동 처리해준다.

 

x == target 일 때까지 반복해주고, return cnt

 

3. target 값으로 변환될 수 없는 경우는 return 0

 

from collections import deque

def solution(begin, target, words):
    if target not in words:
        return 0
    
    q = deque()
    q.append([begin, 0])
    
    while q:
        x, cnt = q.popleft()
        
        if x == target:
            return cnt
        
        for i in range(0, len(words)):
            diff = 0
            word = words[i]
            for j in range(len(x)):
                if x[j] != word[j]:
                    diff += 1
            if diff == 1: #한개만 알파벳이 다른 경우
                q.append([word,cnt+1]) #이동처리 cnt+1

    return 0 #target 값으로 변환될 수 없는 경우

 

 

 

레퍼런스

  • 정답 참고
 

[프로그래머스]LEVEL3 단어변환 - 파이썬

https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장

reliablecho-programming.tistory.com

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글