본문 바로가기
프로그래머스

단어 변환 C++

by paysmile 2022. 1. 29.

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

 

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

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

programmers.co.kr

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

using namespace std;

int solution(string begin, string target, vector<string> words) {
    int answer = 2e9;
    int visited[55];
    for(int i=0; i<55; i++){
        visited[i] = 2e9;
    }
    
    if(find(words.begin(),words.end(),target) == words.end())   return 0;
    
    queue<pair<string,int>> q;
    q.push(make_pair(begin,0));
                
    while(!q.empty()){
        string str = q.front().first;
        int count = q.front().second;
        q.pop();
        
        if(str == target){
            answer = min(answer,count);
            continue;
        }
        
        for(int i=0; i<words.size(); i++){
            int diff = 0;
            for(int j=0; j<words[i].size(); j++){
                if(str[j] != words[i][j]) diff++;
            }
            if(diff == 1){
                if(visited[i] > count+1){
                    q.push(make_pair(words[i],count+1));
                    visited[i] = count+1;
                }
            }
        }
    }
    
    return answer;
}

'프로그래머스' 카테고리의 다른 글

아이템 줍기 C++  (0) 2022.02.07
2 X n 타일링 C++  (0) 2022.01.30
경주로 건설 C++  (0) 2022.01.29
네트워크 C++  (0) 2022.01.23
N으로 표현 C++  (0) 2022.01.23