본문 바로가기

프로그래머스/DFS 와 BFS

단어변환

728x90

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

 

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

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

programmers.co.kr

#include <string>
#include <vector>
#include <queue>
#include <map>
#include <iostream>
#include <algorithm>


using namespace std;


int solution(string begin, string target, vector<string> words) {
    int answer = 0;
    queue<int>q;
    vector<int>check(words.size(),-1);
    bool toggle= false;
    for(int i=0; i<words.size(); i++){
        if(words[i]==target){toggle =true; break;}
    }
    if(toggle==false){return 0;}
    q.push(-1);
    int idx;
    while(!q.empty()){
        idx = q.front();
        q.pop();
        string str;
        if(idx == -1){str =begin;}
        else{
    
            str =words[idx];
        }
        for(int i=0; i<words.size(); i++){
            int count =0;
         //   if(check[i]==-1){
        
                 for(int j=0; j<str.size(); j++){
                    if(words[i][j]==str[j]){ //같은 문자가 같은 위치에 있는지 체크해야함, 그냥 words[i].find(str[j])는 안됨!
                        count++;
                    }
                }
            
            if(count==str.size()-1){
                if(idx==-1){check[i]=1;}
                else{
                    check[i]=check[idx]+1;
                }
                if(words[i]==target){return check[i];}
                 q.push(i);
            }
       // }
        }
    }
    
 return 0;
 
}

'프로그래머스 > DFS 와 BFS' 카테고리의 다른 글

동굴 탐험 - 2020 KAKAO INTERNSHIP  (0) 2021.04.29
불량 사용자  (0) 2021.02.24
네트워크  (0) 2021.02.05
여행경로  (0) 2021.02.05
BFS & DFS  (0) 2021.01.25