Computer Thinking 🌟/Algorithm 📝
Programmers 단어변환: DFS/BFS
sroa.chin
2020. 8. 27. 02:08
https://programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
Lv.3
30분
원리는 String[] words의 값을 list로 넣은 후
한 글자만 다른 애들만 getList 메소드로 List를 뽑아 돌려가며 target값이 나올때까지 min값과 비교하며 구하는 것이다.
실행시간 줄이는 방법을 알아내야한다.. getList 메소드에서 이중for문..ㄷㄷ
import java.util.ArrayList;
import java.util.List;
class Solution {
public int min=Integer.MAX_VALUE;
public String tar;
public int solution(String begin, String target, String[] words) {
tar = target;
List<String> list = new ArrayList<String>();
for (int i = 0; i < words.length; i++) {
list.add(words[i]);
}
repeat(begin, 0, list);
if(min != Integer.MAX_VALUE) return min;
else return 0;
}
public void repeat(String b, int cnt, List<String> list) {
if(b.equals(tar)) {
if(cnt < min) min = cnt;
} else {
list.remove(b);
List<String> tmp = getList(list, b);
for (int i = 0; i < tmp.size(); i++) {
repeat(tmp.get(i), cnt+1, list);
}
}
}
public List<String> getList(List<String> list, String word) {
List<String> sarr = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
int check = 0;
String str = list.get(i);
for (int j = 0; j < str.length(); j++) {
if(str.charAt(j) != word.charAt(j)) check++;
if(check>1) break;
}
if(check==1) sarr.add(str);
}
return sarr;
}
}