[Java 알고리즘] Word Ladder (글자 사다리) BFS 알고리즘.
- 알고리즘 문제/[Java] 알고리즘
- 2020. 7. 28. 21:43
문제 설명
시작 문자 : hit
끝 문자 : cog
문자 리스트 : hot, dot, dog, lot,log, cog
다음과 같이 parameter가 제공되고 시작 문자에서 한글자씩만 바꿔서 문자리스트에 있는 문자들을 통해 끝문자인 cog로 변경되는데까지의 횟수를 구하시오.
예를 들어, hit ->(ait..zit , hat..hzt , hia..hiz) -> hot -> dot -> dog -> log -> cog. => 총 5회.
나의 풀이
class Main {
public static void main(String[] args) {
Main a = new Main();
String beginWord = "hit";
String endWord = "cog";
List<String> wordList = Arrays.asList("hot", "dot", "dog", "lot","log", "cog");
System.out.println(a.solve(beginWord, endWord, wordList));
}
public int solve(String beginWord, String endWord, List<String> wordList) {
if(wordList == null || wordList.size() == 0) return 0;
Queue<String> wordQueue = new LinkedList<>();
wordQueue.offer(beginWord);
int level = 1;
while (!wordQueue.isEmpty()) {
int size = wordQueue.size();
for (int i = 0; i<size; i++) {
String str = wordQueue.poll();
if(str.equals(endWord)) return level;
//get neighbor
for (String neighbor : neighbors(str, wordList)) {
wordQueue.offer(neighbor);
}
}
level++;
}
return 0;
}
public List<String> neighbors(String str, List<String> wordList) {
List<String> result = new ArrayList<String>();
Set<String> dict = new HashSet<String>(wordList);
for (int i = 0; i<str.length(); i++) {
char[] chars = str.toCharArray();
for (char ch = 'a'; ch <= 'z'; ch++) {
chars[i] = ch;
String s = new String(chars);
if (dict.remove(s)) {
result.add(s);
}
}
}
return result;
}
}
wordQueue : 문자큐. 첫 대상은 beginWord(hit)이고 hit부터 한글자씩 변경하면서 wordList에 존재하는 값들을 담을 큐
Set을 사용하는 이유는 문자열의 중복을 제거하기 위함.
결국 요점은 hit 부터 알파벳이 하나씩 바뀌어가면서 wordList에 존재하는 값을 확인하고 큐에 넣어 이를 다시 알파벳을 변경하면서 중간중간 endWord와 비교해가면서 몇번의 for loop을 돌았는지 세면 된다.
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
[DFS 알고리즘 연습문제] 2차원 배열에서 문자열 탐색하기(word search) (2) | 2020.07.31 |
---|---|
[Java 알고리즘] 노드의 최대 깊이, DFS/BFS로 각각 풀어보기 (feat. Stack, Queue, DFS BFS 알고리즘 비교) (1) | 2020.07.24 |
[Java 알고리즘] 지뢰찾기 알고리즘(주변 지뢰 숫자 세기) (0) | 2020.07.21 |
[Java 알고리즘] 프로그래머스, 스킬트리 (0) | 2020.07.17 |
[Java 알고리즘] 프로그래머스, 크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십) (1) | 2020.07.13 |