Algorithm/Programmers
[프로그래머스] 단어 변환
1일1코딩
2020. 10. 17. 18:08
programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
문제풀이
dfs를 이용하여 현재 단어와 한 개의 알파벳만 차이나는 words를 찾아 이동시킨다.
소스코드
더보기
#include <string>
#include <vector>
using namespace std;
int visited[50] = { 0, };
int answer = 987654321;
bool checkChangeWord(string s1, string s2) {
int diffCount = 0;
for (int i = 0; i < s1.length(); i++) {
if (s1[i] != s2[i]) {
diffCount++;
if (diffCount > 1) {
return false;
}
}
}
return diffCount == 1 ? true : false;
}
void solve(string cur, string target, vector<string> words, int depth)
{
if (cur == target) {
if (answer > depth) {
answer = depth;
}
return;
}
if (answer < depth) {
return;
}
for (int i = 0; i < words.size(); i++) {
if (visited[i] == 0 && checkChangeWord(cur, words[i])) {
visited[i] = 1;
solve(words[i], target, words, depth + 1);
visited[i] = 0;
}
}
}
int solution(string begin, string target, vector<string> words) {
solve(begin, target, words, 0);
return answer == 987654321 ? 0 : answer;
}