반응형
트라이를 이용한 풀이
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
Trie t = new Trie();
int N = sc.nextInt();
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
String input = sc.next();
t.insertTrie(input);
list.add(input);
}
int sum = 0;
for (String str : list) {
sum += t.countClick(str);
}
double f = sum / (double) list.size();
System.out.format("%.2f", Math.round(f * 100) / 100.0);
}
}
}
class Trie {
Trie[] trie;
int size;
public Trie() {
super();
this.trie = new Trie[26];
this.size = 0;
}
public void insertTrie(String str) {
Trie child = this;
for (int i = 0; i < str.length(); i++) {
if (child.trie[str.charAt(i) - 'a'] == null) {
child.trie[str.charAt(i) - 'a'] = new Trie();
child.size++;
}
child = child.trie[str.charAt(i) - 'a'];
}
child.size++;
}
public int countClick(String str) {
int count = 1;
Trie child = this;
for (int i = 0; i < str.length(); i++) {
if (child.size != 1 && i != 0) {
count++;
}
child = child.trie[str.charAt(i) - 'a'];
}
return count;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[백준 : 4195] 친구 네트워크 - 유니온 파인드 (0) | 2021.01.07 |
---|---|
[백준 : 1753] 최단경로 -우선순위 큐를 이용한 다익스트라(dijkstra) (0) | 2021.01.06 |
[백준 : 2630] 색종이 만들기 - 분할정복 (0) | 2021.01.06 |
[백준 : 2206] 벽 부수고 이동하기 -BFS (0) | 2021.01.06 |