emluy 개발 일기

C++ - (프로그래머스) 단어변환 본문

알고리즘/c, c++

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

yulme 2020. 10. 16. 02:39
SMALL

1. idea

- 각 단어들 중 한 글자만 차이나는 것만 선택해야한다.

- 선택된 것은 체크해주고 target 단어가 나올 때 까지 dfs함수를 반복한다.

- target은 없고 한글자만 다른 단어가 계속 나오는 경우 dfs를 빠져나올 수 있게 한다.

- 모든 글자를 탐색완료 했거나 target 단어를 찾았다면 dfs를 빠져나올 수 있게 한다.

#include <string>
#include <vector>
#include <iostream>
using namespace std;

string target_word;
vector<string> words_list;
bool check[51] = { false };
int answer = 100;

void dfs(string begin, int result) {
	if (target_word == begin) {
		answer = result;
		return;
	}
	for (int i = 0; i < words_list.size(); i++) {
		int count = 0;
		for (int j = 0; j < words_list[i].size(); j++) {
			if (begin[j] != words_list[i][j])count++;
			if (count == 2) break;
		}
		//만약 한글자만 다르고 두글자는 같다면 단어 변환 가능
		if (count == 1) {
			if (check[i] == false) {
				check[i] = true;
				dfs(words_list[i], result + 1);
				check[i] = false;
			}
		}
	}
}


int solution(string begin, string target, vector<string> words) {
	target_word = target;
	words_list = words;
	dfs(begin,0);
	if (answer == 100) answer = 0;
	return answer;
}

 

반응형
Comments