새소식

⌨️ Algorithms/프로그래머스

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

2022. 8. 14. 22:48

  • -

https://school.programmers.co.kr/learn/courses/30/lessons/43163

 

프로그래머스

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

programmers.co.kr

 

"""
입출력 예시)

begin = "hit", target = "cog", words = ["hot", "dot", "dog", "lot", "log", "cog"] -> 4
begin = "hit", target = "cog", words = ["hot", "dot", "dog", "lot", "log"] -> 0
"""

from collections import deque

def solution(begin, target, words):
    answer = 0
    q = deque()
    q.append([begin, 0]) # 0: 깊이
    visited = [ 0 for i in range(len(words))]

    # target 단어가 words 안에 없으면 변환할 수 없음 -> 0을 return 
    if target not in words:
        answer = 0 
        
    while q:
        word, cnt = q.popleft() # 큐에 삽입된 순서대로 단어(word)와 깊이(cnt)를 뽑음
        if word == target:
            answer = cnt
            break
        for i in range(len(words)): # i -> len(words) 
            temp_cnt = 0
            # 아직 방문하지 않은 노드라면
            if not visited[i]: # visited[i] = 0일 때 아래 코드 동작
                for j in range(len(word)): # j -> len(word)
                    # word의 j번째 알파벳이 words 리스트의 i번째 단어의 j번째 알파벳과 같지 않은 경우
                    if word[j] != words[i][j]:
                        temp_cnt += 1
                if temp_cnt == 1:
                    q.append([words[i], cnt+1])
                    visited[i] = 1
                    
    return answer

 

  • begin에서 target으로 변환하는 가장 짧은 변환 과정 찾기 -> BFS 이용
  • if not False
    • 0, None, 빈 문자열 ''을 not으로 뒤집으면 참이 되므로 if를 동작시킬 수 있음
    • 파이썬 문법 중에서 False로 취급하는 것들
      • None
      • False
      • 0인 숫자들: 0, 0.0, 0j
      • 비어 있는 문자열, 리스트, 튜플, 세트: '', "", [], (), set()
      • 클래스 인스턴스의 bool(), len() 메서드가 0 또는 False를 반환할 때
 

COS Pro 2급 파이썬: 13.3 if 조건문의 동작 방식 알아보기

비어 있는 문자열, 리스트, 튜플, 세트: '', "", [], (), set()

dojang.io

 

  • if not visited[i]: -> visited[i] = 0일 때 아래 코드 동작
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!