관리 메뉴

기억을 위한 기록들

[프로그래머스 lv2] 단어 변환- c++ 본문

Coding Test - cpp/DFS

[프로그래머스 lv2] 단어 변환- c++

에드윈H 2021. 2. 16. 16:15

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

 

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

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

programmers.co.kr

 

#include <string>
#include <vector>
#include <iostream>
using namespace std;
int answer = 214000000;
int check[51];
void D(string begin, string target, vector<string> words, int cnt = 0)
{
	int n = words.size();

	for (int i = 0; i < n; i++)
	{
		int checkNum = 0;
		if (begin == words[i])
			continue;
		for (int j = 0; j < begin.size(); j++)
		{
			if (begin[j] != words[i].at(j))
			{
				checkNum++;
			}
		}

		if (checkNum == 1) //1개이니 정답인지 확인
		{
			if (words[i] == target && answer > cnt + 1)
			{
				answer = cnt + 1;
				return;
			}

			if (!check[i])
			{
				check[i] = true;

				D(words[i], target, words, cnt + 1);
			}
		}



	}
}
int solution(string begin, string target, vector<string> words) {

	D(begin, target, words);

	if (214000000 == answer)
	{
		return 0;
	}
	return answer;
}