베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 5052번: 전화번호 목록

2022. 8. 21. 10:35

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;

public class java_5052 {

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		int t = Integer.parseInt(br.readLine());

		for (int i = 0; i < t; i++) {
			int n = Integer.parseInt(br.readLine());
			Trie trie = new Trie();

			String taa[] = new String[n];

			for (int j = 0; j < n; j++) {
				taa[j] = br.readLine();
				trie.insert(taa[j]);
			}

			// 일관성이 있는지
			Boolean result = true;

			for (int j = 0; j < n; j++) {
				if (!trie.contains(taa[j])) {
					result = false;
					break;
				}
			}

			if (result) {
				bw.write("YES\n");
			} else {
				bw.write("NO\n");
			}
		}

		bw.flush();
		bw.close();
		br.close();
	}
}

class Trie {
	Boolean is_terminal;
	HashMap<Character, Trie> childNodes = new HashMap<>();

	public Trie() {
		is_terminal = false;
	}

	Boolean isLastNode() {
		return is_terminal;
	}

	void setLastNode(Boolean isLastChar) {
		is_terminal = isLastChar;
	}

	void insert(String word) {
		Trie trie = this;

		for (int i = 0; i < word.length(); i++) {
			trie = trie.childNodes.computeIfAbsent(word.charAt(i), c -> new Trie());
		}

		trie.setLastNode(true);
	}

	boolean contains(String word) {
		Trie thisNode = this;

		for (int i = 0; i < word.length(); i++) {

			if (thisNode.isLastNode())
				return false;
			thisNode = thisNode.childNodes.get(word.charAt(i));

		}

		return true;
	}
}
저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 2485번: 가로수  (0) 2022.08.21
[BOJ/JAVA] 9935번: 문자열 폭발  (0) 2022.08.21
[BOJ/JAVA] 1474번: 밑 줄  (0) 2022.08.21
[BOJ/JAVA] 16918번: 봄버맨  (0) 2022.08.21
[BOJ/JAVA] 9205번: 맥주 마시면서 걸어가기  (0) 2022.08.21
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 2485번: 가로수
    • [BOJ/JAVA] 9935번: 문자열 폭발
    • [BOJ/JAVA] 1474번: 밑 줄
    • [BOJ/JAVA] 16918번: 봄버맨
    베오
    베오

    티스토리툴바