일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 자바스크립트
- JavaScript
- string
- map
- html5
- MongoDB
- 백준 16565번
- 게임 서버 아키텍처
- Github
- 백준 5670번
- router
- insomnia
- 백준 13334번
- Next
- 트라이
- 이분 탐색
- 그래프 탐색
- 백준 14725번
- localstorage
- pm2
- trie
- PROJECT
- ERD
- 그리디
- branch
- Express.js
- MySQL
- Prisma
- HTTP
- ccw 알고리즘
Archives
- Today
- Total
dh_0e
[PS] 전화번호 목록 / C++ (백준 5052번) 본문
자료구조 트라이(Trie) 기초 문제로 해시 테이블을 사용해서 풀 수도 있는 문제
Trie를 문제에 맞게 구현해주면 쉽게 풀 수 있다.
- insert 도중 finish가 true면 일관성 X
- insert가 끝난 후 finish에 true 값을 저장하려는데 number 배열이 비어있지 않으면 일관성 X
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Trie {
bool finish;
Trie* number[10];
Trie() :finish(false) {
memset(number, 0, sizeof(number));
}
~Trie() {
for (int i = 0; i < 10; i++) {
if (number[i])delete(number[i]);
}
}
bool insert(char* key) {
if (finish == true) {
return false;
}
if (*key == '\0') {
finish = true;
for (int i = 0; i < 10; i++) {
if (number[i] != NULL) {
return false;
}
}
return true;
}
int cur = *key - '0';
if (number[cur] == NULL) {
number[cur] = new Trie();
}
return number[cur]->insert(key + 1);
}
};
int main()
{
int t;
scanf("%d", &t);
for (int i = 1; i <= t; i++) {
int n;
scanf("%d", &n);
Trie* tree = new Trie();
bool f = true;
for (int j = 0; j < n; j++) {
char call[11];
scanf("%s", call);
if (tree->insert(call) == false) {
f = false;
}
}
if (f)printf("YES\n");
else printf("NO\n");
}
return 0;
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[PS] 휴대폰 자판/ C++ (백준 5670번) (0) | 2025.03.10 |
---|---|
[PS] 개미굴 / C++ (백준 14725번) (0) | 2025.03.07 |
[PS] 열쇠 / C++ (백준 9328번) (0) | 2025.02.13 |
[PS] 텀 프로젝트 / C++ (백준 9466번) (0) | 2025.02.04 |
[PS] 합이 0인 네 정수 / C++ (백준 7453번) (0) | 2025.02.04 |