자바/코딩테스트
[프로그래머스] 단어 변환 - Java(자바)
대전집주인
2024. 4. 12. 17:53
728x90
SMALL
문제 이해
- 한번에 한 알파벳만 바꿀 수 있다.
- 한번에 문자열의 한 알파벳만 바꾸면서 words에 포함된 단어로 변경, target에 최소한의 과정으로 변환 가능한 숫자를 구하여라
- 한번에 한 알파벳만 바꿔서 words에 포함된 문자열을 구하는건 begin 문자열과 한개의 알파벳만 다르다는걸 의미한다.
- bfs 방법으로 최소한의 과정을 구하기로 했다.
- 큐와 방문자 배열을 생성하여 한개의 알파벳만 다른걸 구한다.
- words의 단어가 한개의 알파벳만 다르고 방문한적이 없다면 (여태까지 방문한 횟수 + 1 )을 방문자 배열에 집어 넣는다.
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
int answer = 0;
int[] visit = new int[words.length];
Queue<Integer> que = new LinkedList<>();
int check = 0;
// words 배열 문자열중 한 알파벳만 다를 경우 begin에 다시 넣고 시작
for(int i = 0; i<words.length; i++){
if(visit[i] == 0 && diff(begin, words[i]) == 1){
que.add(i);
visit[i] = 1;
}
if(target.equals(words[i])){
check = 1;
}
}
// 변활할 수 없는 경우 0
if(check == 0) return 0;
while(!que.isEmpty()){
int idx = que.poll();
String str = words[idx];
if(str.equals(target)){
answer = visit[idx];
break;
}
for(int i = 0; i<words.length; i++){
if(visit[i] == 0 && diff(str, words[i]) == 1){
que.add(i);
visit[i] = visit[idx] + 1;
}
}
}
return answer;
}
static int diff(String start, String last){
int cnt = 0;
for(int i = 0; i<last.length(); i++){
if(start.charAt(i) != last.charAt(i)){
cnt++;
}
}
return cnt;
}
}
728x90
LIST