와이유스토리

[DFS 순열] 프로그래머스 단어 변환 C++ 본문

코딩테스트/그래프|트리

[DFS 순열] 프로그래머스 단어 변환 C++

유(YOO) 2022. 1. 20. 21:36

 

https://programmers.co.kr/learn/courses/30/lessons/43163

 

코딩테스트 연습 - 단어 변환

두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수

programmers.co.kr

#include <string>
#include <vector>
#define MAX 51

using namespace std;

int res = MAX;
bool check[MAX];

void dfs(string begin, string target, vector<string> words, int ans) {
	if (target == begin) {
		res = min(res, ans);
		return;
	}

	for (int i = 0; i < words.size(); i++) {
		int cnt = 0;
		for (int j = 0; j < words[i].size(); j++) {
			if (begin[j] != words[i][j]) cnt++;
			if (cnt >= 2) break;
		}
        
		// 다른 알파벳이 하나여야 수정 가능
		if (cnt == 1){
			if (!check[i]) {
				check[i] = true;
				dfs(words[i], target, words, ans + 1);
				check[i] = false;
			}
		}
	}
}

int solution(string begin, string target, vector<string> words) {
	dfs(begin, target, words, 0);
	if (res == MAX) res = 0;
	return res;
}
Comments