지나공 : 지식을 나누는 공간
[프로그래머스 DFS/BFS] 단어변환 - C++ 본문
문제출처 : https://programmers.co.kr/learn/courses/30/lessons/43163
dfs로 풀었습니다.
재귀함수, dfs 기본 구현에 충실한 문제였습니다.
dfs, bfs에 대해서는 추후에 포스팅을 할 예정입니다.
[주석 없는 코드]
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int ans = 50;
bool check[50];
bool diff(string a, string b){
int dif =0;
for(int i=0; i<a.size();i++){
if(a[i]!=b[i])
dif++;
if(dif >1)
break;
}
if(dif==1)
return true;
else
return false;
}
void dfs(string begin, string target,vector<string>words,int cnt){
if(begin==target){
ans = min(ans,cnt);
return;
}
for(int i=0; i<words.size();i++){
if(diff(begin,words[i]) && !check[i]){
check[i]=true;
dfs(words[i],target,words,cnt+1);
check[i]=false;
}
}
return;
}
int solution(string begin, string target, vector<string> words) {
int answer = 0;
dfs(begin,target,words,0);
answer = ans;
if(answer == 50)
return 0;
return answer;
}
[주석 있는 코드]
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int ans = 50;
bool check[50];
//다른 문자가 1개인지 확인하는 함수
bool diff(string a, string b){
int dif =0;
for(int i=0; i<a.size();i++){
if(a[i]!=b[i])
dif++;//다른 글자 수
if(dif >1)
break;
}
if(dif==1)
return true;
else
return false;
}
void dfs(string begin, string target,vector<string>words,int cnt){
if(answer <= cnt)//이미 깊이(cnt)가 이전에 찾은 answer보다 크면 탐색할 필요가 없습니다.
return;
if(begin==target){
ans = min(ans,cnt);
return;
}
for(int i=0; i<words.size();i++){
//문자열이 하나만 다르면서 동시에 방문 안한 단어이면 탐색
if(diff(begin,words[i]) && !check[i]){
check[i]=true;
dfs(words[i],target,words,cnt+1);
check[i]=false;
}
}
return;
}
int solution(string begin, string target, vector<string> words) {
int answer = 0;
dfs(begin,target,words,0);
answer = ans;
if(answer == 50)//target문자열을 만나지 못했을 때
return 0;
return answer;
}
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 이분탐색] 예산 - C++ (0) | 2020.07.15 |
---|---|
[프로그래머스 - DFS/BFS] 타겟 넘버 - C++ (0) | 2020.07.08 |
[프로그래머스 해시] 전화번호 목록 - C++ (0) | 2020.07.07 |
[프로그래머스 해시] 완주하지 못한 선수 - C++ (0) | 2020.07.07 |
'스택'으로 구현한 프로그래머스 탑(C++, 스택/큐) (0) | 2020.06.05 |
Comments