Algorithm/C++ - 프로그래머스

프로그래머스 Level3 - 단어 변환 C++

ㅇㅇ잉 2021. 8. 6. 16:25

이 문제는 오타 때문에 고생했던 문제다....

 

begin단어에서 하나만 다른 걸 찾아 나가면 되는데, 재귀함수로 풀면 쉽게 풀린다.

방문체크/변환 가능 여부를 따진다.

그리고 단계마다 1씩 더해가면서 재귀 돌리면 끝~!

 

답은

최소 단계 찾기,words의 최대 수 50이니까 answer 초기값을 51로 설정해주고, 나중에 이 51이 그대로면 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
39
40
41
42
43
44
45
46
47
48
#include <string>
#include <vector>
 
using namespace std;
 
int answer=51;
 
void dfs(string beginstring target, vector<string>& words, vector<bool>& visit,int cnt){
    //같은 단어 찾음
    if(begin==target){
        //최소 단계를 answer에
        answer = min(cnt,answer);
        return;
    }
    
    
    for(int i=0;i<words.size();i++){
        int check=0//알파벳 하나만 다른지 검사
 
        //아직 확인 안 한 단어면
        if(!visit[i]){
            //몇개가 다른지 check
            for(int j=0;j<begin.length();j++){
                if(begin[j]!=words[i][j]) check++;
            }
                
            //하나만 다르면 바꿀 수 있음
            if(check==1){
                visit[i]=true;
                dfs(words[i],target,words,visit,cnt+1);
                visit[i]=false;
            }
        }
    }
    
}
 
 
int solution(string beginstring target, vector<string> words) {
    
    vector<bool> visit(words.size(),false);
    
    dfs(begin,target,words,visit,0);
    
    if(answer==51) answer=0;
    
    return answer;
}
cs