알고리즘

[백준] 전화번호 목록 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;
        }
    }
}

트라이로 풀 수 있었던 문제입니다.

문제를 틀렸던 이유는 입력을 전부 받지않고 중간에 답을 출력하여 틀렸었습니다.