프로그래머스 단어 변환(words) 정답 코드
뿌리튼튼 CS/Algorithm2019. 4. 16. 10:28
난이도 ★★★★☆
힌트
전형적인 너비우선탐색(BFS) 문제입니다. 최소값을 찾는 문제이므로 전역(혹은 그런느낌)으로 최소값을 저장할 변수(minCountMap)를 잘 운용하셔야 해요.
구현하실 때, 이미 방문한 녀석인지 체크할 변수가 필요할텐데 Java는 객체지향 언어잖아요? |
이하는 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Solution {
private Map<String, Integer> minCountMap;
private int MAX_COUNT;
public int solution(String start, String target, String[] words) {
minCountMap = new HashMap<>();
MAX_COUNT = words.length;
Set<Word> wordSet = new HashSet<>();
for (String word : words) {
Word wordObj = new Word();
wordObj.word = word;
wordObj.used = false;
wordSet.add(wordObj);
}
int answer = getMinCount(start, target, wordSet);
if (answer > MAX_COUNT) { // no way
return 0;
}
return answer;
}
private int getMinCount(String start, String target, Set<Word> words) {
Integer minCount = minCountMap.get(start);
if (minCount == null) {
minCount = MAX_COUNT + 1;
}
for (Word word : words) {
if (word.used || !isNext(start, word.word)) {
continue;
}
if (target.equals(word.word)) {
minCount = 1;
break;
}
word.used = true;
int count = getMinCount(word.word, target, words) + 1;
word.used = false;
if (count < minCount) {
minCount = count;
}
}
minCountMap.put(start, minCount);
return minCount;
}
private boolean isNext(String a, String b) {
int diffCount = 0;
for (int i = 0; i < a.length(); i++) {
if (a.charAt(i) != b.charAt(i)) {
diffCount++;
if (diffCount > 1) {
return false;
}
}
}
return true;
}
private class Word {
String word;
boolean used;
@Override
public int hashCode() {
return word.hashCode();
}
}
}
|
cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
프로그래머스 네트워크(computers) 정답 코드 (0) | 2019.04.17 |
---|---|
프로그래머스 여행경로(tickets) 정답 코드 (0) | 2019.04.16 |
프로그래머스 타겟 넘버 정답 코드 (0) | 2019.04.16 |
프로그래머스 프린터(priorities) 정답 코드 (0) | 2019.04.16 |
프로그래머스 쇠막대기(arrangement) 정답 코드 (0) | 2019.04.15 |