티스토리 뷰

 

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

 

5052번: 전화번호 목록

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

www.acmicpc.net

 

class TrieNode {
	constructor(character, isCompleteWord = false) {
		this.character = character;
		this.isCompleteWord = isCompleteWord;
		this.children = new Map();
	}

	getChild(character) {
		return this.children.get(character);
	}

	addChild(character, isCompleteWord = false) {
		if (!this.children.has(character)) {
			this.children.set(character, new TrieNode(character, isCompleteWord));
		}

		const childNode = this.children.get(character);

		childNode.isCompleteWord = childNode.isCompleteWord || isCompleteWord;

		return childNode;
	}

	hasChild(character) {
		return this.children.has(character);
	}

	hasChildren() {
		return this.children.size !== 0;
	}
}

class PhoneBook {
	constructor() {
		this.head = new TrieNode('*');
	}

	addPhoneNumber(numberString) {
		const characters = Array.from(numberString);
		let currentNode = this.head;

		for (let i = 0; i < characters.length; i++) {
			const isComplete = i == characters.length - 1;
			if (isComplete == true && currentNode.hasChild(characters[i])) {
				return false;
			}
			currentNode = currentNode.addChild(characters[i], isComplete);
			if (isComplete == false && currentNode.isCompleteWord == true) {
				return false;
			}
		}
		return true;
	}
}

const input = require('fs').readFileSync('./dev/stdin').toString().trim().split('\n');

let i = 0;
const T = +input[i++];
const answer = [];
for (let t = 0; t < T; t++) {
	const C = +input[i++];
	const phoneBook = new PhoneBook();
	let result = 'YES';
	for (let c = 0; c < C; c++) {
		const success = phoneBook.addPhoneNumber(input[c + i].trim());
		if (!success) {
			result = 'NO';
			break;
		}
	}
	answer.push(result);
	i = i + C;
}
console.log(answer.join('\n'));
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함