https://school.programmers.co.kr/learn/courses/30/lessons/43163
신기한 형식의 dfs문제였다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string Begin, Target;
vector<string> Words;
bool visit[100] = { false };
int res = 2147483647;
bool canTransform(string a, string b) {
if (a.size() != b.size())
return false;
int diffCnt = 0;
for (int i = 0; i < a.size(); i++)
if (a[i] != b[i])
diffCnt++;
if (diffCnt != 1)
return false;
return true;
}
void recur(string input, int depth) {
if (input == Target) {
res = depth;
return ;
}
for (int i = 0; i < Words.size(); i++) {
if (canTransform(input, Words[i]) && visit[i] == false) {
visit[i] = true;
recur(Words[i], depth + 1);
visit[i] = false;
}
}
}
int solution(string begin, string target, vector<string> words) {
Begin = begin; Target = target; Words = words;
if (find(words.begin(), words.end(), target) == words.end())
return (0);
recur(begin, 0);
return res;
}
dfs는 구조 먼저 생각하고 재귀부분에서 조건문을 최대한 함수분할로 빼야 안 헷갈리는 것 같다.
'<algorithm> > 프로그래머스' 카테고리의 다른 글
프로그래머스 삼각 달팽이 c++ (0) | 2023.09.02 |
---|---|
프로그래머스 게임 맵 최단거리 c++ (dfs, bfs) (0) | 2023.08.31 |
프로그래머스 [3차] n진수 게임 c++ (0) | 2023.08.30 |
프로그래머스 압축 c++ (4) | 2023.08.07 |
프로그래머스 이중우선순위큐 c++ (0) | 2023.08.06 |