본문 바로가기
코딩 테스트

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

by zoodi 2021. 2. 18.
728x90

🔮문제

begin -> target 단어로 가는 가장 짧은 단계 return

 

1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다.

2. words에 있는 단어로만 변환할 수 있습니다.

 

🔮풀이

1. target이 words에 존재하는 경우

2. target이 words에 존재하지 않는 경우

  2-1. begin과 target의 차이=1 이면 탐색 종료

  2-2. begin과 target의 차이=1이 아니면 차이가 1인 다음 단어 탐색, 단계(cnt) + 1


🔮코드

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

int solution(string begin, string target, vector<string> words) {
    int answer = 999;
    int cnt = 0;
    bool isOk = false;
    
    //1. target이 words배열에 존재하는지 확인, 없으면 0 return
    for(auto x : words){
        if(x == target)
            isOk = true;
    }
    
    if(isOk == false)
        return 0;
    
    //2. target이 words배열에 존재 할 경우
    for(int i=0; i<words.size(); i++){
        string cur = words[i];
        int tmp_cnt = 0;
        //2-1. 현재 단어와 target단어의 차이가  1이면 탐색 종료
        for(int j=0; j<target.size(); j++){
            if(begin[j] != target[j])
                tmp_cnt++;
        }
        if(tmp_cnt == 1){
            cnt+=1;
            break;
        }
        else
            tmp_cnt = 0;
        //2-2. 그렇지 않을 경우 현재와 차이가 1인 다음 단어 탐색
        for(int j = 0; j<cur.size(); j++){
            if(begin[j] != cur[j])
                tmp_cnt++;
        }
        if(tmp_cnt == 1){
            begin = words[i];
            cnt += 1;
        }
    }
    answer = min(answer, cnt);
    return answer;
}
728x90

댓글