Programmers: 단어 변환

KangDroid·2021년 5월 23일
0

Algorithm

목록 보기
20/27

문제

알고리즘

  • 만약 인풋 벡터에 답[Target]이 없으면 0 리턴
  • DFS 탐색 시작
    • 만약 현재 값과 답이 같으면 깊이 갱신 후 리턴
    • 아니라면 다음을 진행
      • 인풋 벡터를 순회하면서
      • 만약 현재 '단어'와 인풋 백터 안에 있는 단어의 차이가 '1'이라면
      • DFS 재귀[Depth + 1]

코드

#include <iostream>
#include <climits>
#include <vector>
#include <algorithm>

using namespace std;

int min_number = INT_MAX;

bool is_difference_one(string& target, string& target_two) {
    int differ = 0;
    for (int i = 0; i < target.length(); i++) {
        if (target[i] != target_two[i]) {
            differ++;
        }
    }

    return (differ == 1);
}

void do_dfs(string work, string& target, vector<string>& vec_target, vector<bool>& used_vector, int depth) {
    if (work == target) {
        min_number = min(min_number, depth);
        return;
    }

    for (int i = 0; i < vec_target.size(); i++) {
        if (is_difference_one(work, vec_target[i]) && used_vector[i] == false) {
            used_vector[i] = true;
            do_dfs(vec_target[i], target, vec_target, used_vector, depth+1);
            used_vector[i] = false;
        }
    }
}

int solution(string begin, string target, vector<string> vec_target) {
    if (find(vec_target.begin(), vec_target.end(), target) == vec_target.end()) return 0;
    vector<bool> used_vector(vec_target.size(), false);
    do_dfs(begin, target, vec_target, used_vector, 0);
    return min_number;
}
profile
Student Platform[Backend] Developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN