문제
https://programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr

주안점
구조
단어를 BFS로 모두 지나며 확인해 본다.
코드
#include<bits/stdc++.h>
using namespace std;
int cnt, x;
int goal = -1;
queue<int> q;
bool flag = false;
int visited[54];
int solution(string begin, string target, vector<string> words) {
int answer = 0;
for(int i=0; i<words.size(); i++){
if(words[i] == target) goal = i;
cnt = 0;
for(int j=0; j<begin.size(); j++){
if(begin[j]!=words[i][j]) cnt++;
if(cnt>1) break;
}
if(cnt==1) {
if(words[i]==target) answer = 1;
q.push(i);
visited[i] = 1;
}
}
if(answer) return answer;
if(goal==-1) {
answer = 0;
return answer;
}
while(q.size()){
x = q.front(); q.pop();
for(int i=0; i<words.size(); i++){
if(i==x) continue;
if(visited[i]) continue;
cnt = 0;
for(int j=0; j<begin.size(); j++){
if(words[x][j]!=words[i][j]) cnt++;
if(cnt>1) break;
}
if(cnt==1) {
visited[i] = visited[x]+1;
if(i==goal) flag = true;
q.push(i);
}
}
if(flag) break;
}
answer = visited[goal];
return answer;
}