그럴듯한 개발 블로그
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

신기한 형식의 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는 구조 먼저 생각하고 재귀부분에서 조건문을 최대한 함수분할로 빼야 안 헷갈리는 것 같다.

반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!