bfs 로 풀었다.
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
int answer = 0;
if(!Arrays.asList(words).contains(target)){
return 0;
}
Queue<String> myQueue = new LinkedList<>();
int[] visited = new int[words.length];
for ( int i = 0; i < words.length; i++ ) {
if ( isChangeable(begin, words[i]) ) {
myQueue.add(words[i]);
visited[i] = 1;
}
}
while(!myQueue.isEmpty()){
String curr = myQueue.remove();
int idxTarget = Arrays.asList(words).indexOf(target);
int idxCurr = Arrays.asList(words).indexOf(curr);
if(curr.equals(target))
return visited[ idxTarget]; // 도착하면 리턴
for(int j=0; j<words.length; j++){
if(visited[j] != 0) continue;
if(!isChangeable(curr, words[j])) continue;
visited[j] = visited[idxCurr] + 1;
myQueue.add(words[j]);
}
}
return 0;
}
static boolean isChangeable(String curr, String next){
int diff = 0;
for ( int i = 0; i < curr.length(); i++ ) {
if ( curr.charAt(i) != next.charAt(i) )
diff++;
if ( diff > 1 )
return false;
}
return true;
}
}
'알고리즘 > BFS|DFS' 카테고리의 다른 글
[Sofreer 문제풀이] Lv.3(순서대로 방문하기) feat. Java (0) | 2024.04.03 |
---|---|
[프로그래머스 연습문제 level_2 ] 게임 맵 최단거리 (1) | 2023.11.29 |
[프로그래머스 연습문제 level_3 ] 네트워크 (0) | 2023.11.16 |
[알고리즘] DFS - 재귀호출, 스택(Stack) (0) | 2023.11.03 |
[Sofreer 문제풀이] Lv.2(장애물 인식 프로그램) feat. Java (1) | 2023.11.02 |