## 접근
- Trie의 add 연산은 간단하나, find 연산은 종료 조건을 분류
* "?" 만나서 종료하는 경우, 존재하지 않은 단어를 만날 경우
## 효율성
- Reverse라는 메소드를 정의해서 사용했는데, 매번 += 연산을 통해서 concat 시켰는데 이게 효율성을 어긋나게 했다.
- ReplaceAll으로 '?'를 대체하는 것대신 '?' 발견 시 종료하도록 코드 구성
## 해설코드
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
|
import java.util.*;
import java.lang.*;
import java.io.*;
class Solution {
class TrieNode{
int count;
TrieNode[] tArr;
TrieNode(){
count = 0;
tArr = new TrieNode[26];
}
public void add(String s){
TrieNode trie = this;
this.count += 1;
for(int i = 0; i < s.length(); i++){
if(trie.tArr[s.charAt(i) - 'a'] == null)
trie.tArr[s.charAt(i) - 'a'] = new TrieNode();
trie = trie.tArr[s.charAt(i) -'a'];
trie.count += 1;
}
}
}
public int[] solution(String[] words, String[] queries) {
int[] answer = new int[queries.length];
TrieNode[][] root = new TrieNode[10001][2];
for(int i = 0; i < words.length; i++){
if(root[words[i].length()][0] == null){
root[words[i].length()][0] = new TrieNode();
root[words[i].length()][1] = new TrieNode();
}
root[words[i].length()][0].add(words[i]);
root[words[i].length()][1].add(new StringBuilder(words[i]).reverse().toString());
}
for(int i = 0; i < queries.length; i++){
String stmp = queries[i];
TrieNode tTmp;
if(root[queries[i].length()][0] == null){
answer[i] = 0;
continue;
}
if(queries[i].charAt(0) != '?'){
tTmp = root[queries[i].length()][0];
}else{
tTmp = root[queries[i].length()][1];
stmp = new StringBuilder(stmp).reverse().toString();
}
boolean flag = true;
for(int j = 0; j < stmp.length(); j++){
if(stmp.charAt(j) == '?') break;
if(tTmp.tArr[stmp.charAt(j) -'a'] == null){
answer[i] = 0;
flag = false;
break;
}
else
tTmp = tTmp.tArr[stmp.charAt(j) - 'a'];
}
if(flag) answer[i] = tTmp.count;
}
return answer;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2019 KAKAO BLIND RECRUITMENT] 블록 게임(Java, 간단한 코드) (0) | 2020.08.27 |
---|---|
[2019 KAKAO BLIND RECRUITMENT] 길 찾기 게임(Java, 간단한 코드) (0) | 2020.08.27 |
[2019 KAKAO BLIND RECRUITMENT] 무지의 먹방 라이브(Java) (0) | 2020.08.27 |
[2020 KAKAO BLIND RECRUITMENT] 기둥과 보 설치(Java, 간단한코드) (0) | 2020.08.25 |
[2018 KAKAO BLIND RECRUITMENT] [3차] n진수 게임 (0) | 2020.01.26 |