khann's IT와 경제 블로그

반응형

프로그래머스 단어 변환 풀이 (파이썬)

 

프로그래머스 -> 코딩 테스트 연습 -> 깊이/너비 우선 탐색(DFS/BFS)에서 

단어 변환에 대한 문제

 

python으로 BFS가 아닌 DFS를 이용해 문제를 풀었다.

 

문제 설명

 

두 개의 단어 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 target words return
hit cog [hot, dot, dog, lot, log, cog] 4
hit cog [hot, dot, dog, lot, log] 0

 

입출력 예 설명

예제 #1
문제에 나온 예와 같습니다.

예제 #2
target인 cog는 words 안에 없기 때문에 변환할 수 없습니다.

 

 

 

 

 

문제 해석

begin 단어로 시작해서 target 단어까지 변환하는데 가장 짧은 루트(depth) 찾기

-> 각 depth에서 어느 경로의 탐색에서 제일 빨리 target 단어까지 변환되는지 찾아야 한다.

-> DFS 이용

 

전제조건

1. 각 단어의 모든 알파벳은 소문자로 이루어져 있다.

2. 모든 단어의 길이는 같다. (3 이상 10 이하)

3. 중복되는 단어는 없다. 

 

 

단어 변환 조건

1. 한 번에 한 개의 알파벳만 바꿀 수 있다. -> 단어의 3 알파벳 중 하나만 다른 경우를 조건으로 건다. 

2. words에 있는 단어로만 변환할 수 있다. -> target 단어가 words에 없으면 0을 반환한다.

 

 

 

 

 

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
answer = 0
def d fs(begin,target,words,visited):
    global answer
    stacks = [begin]
 
    while stacks:
        # 스택을 활용한 dfs 구현
        stack = stacks.pop()
        
        if stack == target:
            return answer
        
        for w in range(0,len(words)):
            # 조건 1. 한 개의 알파벳만 다른 경우
            if len([i for i in range(0,len(words[w])) if words[w][i]!=stack[i]]) == 1:
 
                if visited[w] != 0:
                    continue
 
                visited[w] = 1
 
                # stack에 추가
                stacks.append(words[w])
        
        # depth +
        answer +=1
def solution(begin, target, words):
    global answer
 
    # 조건 2. words에 있는 단어로만 변환할 수 있습니다.
    if target not in words:
        return 0
    
    visited = [0 for i in words]
    
   dfs(begin,target,words,visited)
 
    return answer
cs
반응형

'알고리즘' 카테고리의 다른 글

알고리즘 정리 #1 - 최대공약수와 최소공배수  (0) 2019.07.20

이 글을 공유합시다

facebook twitter googleplus kakaostory naver