프로그래머스

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

programmers.co.kr


나의 풀이

  • 단어를 변환하려면 1 글자만 달라야 하기 때문에, 이를 이용해서 그래프를 구성한 다음에 BFS로 탐색했다.
from collections import deque

def bfs(start, end, graph, visited):
    # 시작점 입력 + 방문 처리
    queue = deque()
    queue.append([start, 1])
    visited[start] = 1
    
    while queue:
        node, cnt = queue.popleft()
        if node == end:
            return cnt
        else:
            for next in graph[node]:
                if not visited[next]:
                    queue.append([next, cnt + 1])
                    visited[next] = 1
    return 0
            
def solution(begin, target, words):
    # answer = 0
    graph = {}
    word_len = len(target)
    visited = dict(zip(words, [0] * len(words)))
    # 그래프 구성
    for i, key in enumerate(words):
        graph[key] = []
        for j, val in enumerate(words):
            cnt = 0
            if i == j: continue
            for k in range(word_len):
                # 거리 확인
                if key[k] != val[k]:
                    cnt += 1
                # 거리 1 넘으면 제거
                if cnt > 1:
                    break
            else:
                graph[key].append(val)
    # 방문 시작
    for node, _ in graph.items():
        cnt = 0
        for i in range(word_len):
            if begin[i] != node[i]:
                cnt += 1
            if cnt > 1:
                break
        else:
            answer = bfs(node, target, graph, visited)
            
    return answer

다른 사람 풀이

  • 그래프를 먼저 구성하지 않고, 조건에 맞춰서 탐색했다
from collections import deque


def solution(begin, target, words):
    answer = 0
    q = deque()
    q.append([begin, 0])
    V = [ 0 for i in range(len(words))]
    while q:
        word, cnt = q.popleft()
        if word == target:
            answer = cnt
            break        
        for i in range(len(words)):
            temp_cnt = 0
            if not V[i]:
                for j in range(len(word)):
                    if word[j] != words[i][j]:
                        temp_cnt += 1
                if temp_cnt == 1:
                    q.append([words[i], cnt+1])
                    V[i] = 1
                    
    return answer
 

프로그래머스 단어 변환(python)

https://programmers.co.kr/learn/courses/30/lessons/43163?language=python3두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 targe

velog.io