알고리즘
[백준] 전화번호 목록 5052 - java
minkang
2021. 7. 19. 00:56
https://www.acmicpc.net/problem/5052
5052번: 전화번호 목록
첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가
www.acmicpc.net
public class 전화번호목록 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int testCase=1; testCase<=t; testCase++) {
int n = Integer.parseInt(br.readLine());
Trie trie = new Trie();
boolean flag = false;
for(int i=0; i<n; i++) {
if(!trie.insert(br.readLine().replace(" ",""))) {
flag = true;
}
}
sb.append(flag==true?"NO\n":"YES\n");
}
System.out.println(sb.toString());
}
static class TrieNode {
Map<Character, TrieNode> childNodes = new HashMap<>();
boolean isLastChar;
}
static class Trie {
TrieNode root = new TrieNode();
boolean insert(String word) {
TrieNode thisNode = root;
for(int i = 0; i < word.length(); i++) {
char n = word.charAt(i);
if(thisNode.childNodes.get(n) == null) {
thisNode.childNodes.put(n, new TrieNode());
}
thisNode = thisNode.childNodes.get(n);
if(thisNode.isLastChar == true) return false;
}
if(thisNode.childNodes.size() != 0) return false;
thisNode.isLastChar = true;
return true;
}
}
}
트라이로 풀 수 있었던 문제입니다.
문제를 틀렸던 이유는 입력을 전부 받지않고 중간에 답을 출력하여 틀렸었습니다.