π»Tech/βJava
[Java] νλ‘κ·Έλλ¨Έμ€ λ¨μ΄ λ³ν
_viper_
2023. 10. 4. 17:48
λ°μν
π λ¬Έμ
π‘ νμ΄
BFS(λλΉ μ°μ νμ) μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ "begin" λ¬Έμμ΄μμ "target" λ¬Έμμ΄λ‘ λ³ννλλ° νμν μ΅μ λ¨κ³ μλ₯Ό κ³μ°ν©λλ€.
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
int answer = 0; // μ΅μ λ¨κ³ μλ₯Ό μ μ₯ν λ³μ
boolean[] visited = new boolean[words.length]; // λ¨μ΄ λ°©λ¬Έ μ¬λΆλ₯Ό μΆμ νλ λ°°μ΄
Queue<String> queue = new LinkedList<>(); // BFS νμμ μν ν
queue.offer(begin); // μμ λ¨μ΄λ₯Ό νμ μΆκ°
while (!queue.isEmpty()) { // νκ° λΉμ΄μμ§ μμ λμ λ°λ³΅
int size = queue.size(); // νμ¬ λ 벨μ ν ν¬κΈ°λ₯Ό μ μ₯
for (int i = 0; i < size; i++) {
String current = queue.poll(); // νμμ νμ¬ λ¨μ΄ μΆμΆ
if (current.equals(target)) { // νμ¬ λ¨μ΄κ° λͺ©ν λ¨μ΄μΈ κ²½μ°
return answer; // μ΅μ λ¨κ³ μ λ°ν
}
for (int j = 0; j < words.length; j++) {
if (!visited[j] && canTransform(current, words[j])) {
// λ¨μ΄ λ°©λ¬Έ μ¬λΆ νμΈ λ° λ³ν κ°λ₯ν κ²½μ°
visited[j] = true; // λ¨μ΄λ₯Ό λ°©λ¬ΈμΌλ‘ νμ
queue.offer(words[j]); // νμ μΆκ°
}
}
}
answer++; // νμ¬ λ 벨μ λͺ¨λ λ¨μ΄λ₯Ό μ²λ¦¬νκ³ λ¨κ³ μ¦κ°
}
return 0; // λ³νν μ μλ κ²½μ°
}
private boolean canTransform(String from, String to) {
int diffCount = 0; // λ¬Έμ μ°¨μ΄λ₯Ό λνλΌ λ³μ μ΄κΈ°ν
for (int i = 0; i < from.length(); i++) {
if (from.charAt(i) != to.charAt(i)) {
diffCount++; // λ€λ₯Έ λ¬Έμκ° λ°κ²¬λ λλ§λ€ μ¦κ°
}
if (diffCount > 1) {
return false; // λ¬Έμ μ°¨μ΄κ° 1μ μ΄κ³Όνλ©΄ λ³ν λΆκ°λ₯
}
}
return diffCount == 1; // λ¬Έμ μ°¨μ΄κ° 1μ΄λ©΄ λ³ν κ°λ₯, κ·Έ μΈμ λΆκ°λ₯
}
}