[๋ฐฑ์ค(BOJ)] ์ ํ๋ฒํธ ๋ชฉ๋ก(5052) Java
๋ฌธ์ : BOJ_5052๋ฒ ์ ํ๋ฒํธ ๋ชฉ๋ก
๋ฌธ์ ์ค๋ช
Trie(ํธ๋ผ์ด)
ํธ๋ผ์ด ๋ฌธ์ ์ค ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์
๋๋ค.
์ ํ๋ฒํธ๋ค์ ์
๋ ฅ๋ฐ๋๋ฐ, ํด๋น ๋ฒํธ์ ์ฒซ ๋ฒํธ๋ถํฐ ๋ ๋ฒํธ๊ฐ ๋ค๋ฅธ ์ ํ๋ฒํธ์ ์ฒซ ๋ฒํธ๋ถํฐ ํด๋น๋์์ผ๋ฉด
์ผ๊ด์ฑ์ด ์๋ ๊ฒ์ด๋ผ๊ณ ํ๋จํด์ผํ๊ณ , ์๋ก ๊ฒน์น์ง์์ผ๋ฉด ์ผ๊ด์ฑ์ด ์๋ ๊ฒ์ด๋ผ๊ณ ํ๋จํด์ผํฉ๋๋ค.
Solution
java๋ก ํธ๋ผ์ด๊ตฌ์กฐ๋ฅผ ๊ตฌํํด์ ํ์ด๋ณด์์ต๋๋ค.
String์ ์
๋ ฅ๋ฐ์ ๋ค, String์ ํ ๊ธ์์ฉ for๋ฌธ์ผ๋ก ๋๋ ค๊ฐ๋ฉฐ,
ํด๋น ์์ ๋ฒํธ๊ฐ ์์ผ๋ฉด Trie ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์์์ ์ ๋ฌด์ ๋จ์ด์ ๋ ์ ๋ฌด๋ฅผ ํ์
ํ์ต๋๋ค.
Description
ํ ์คํธ์ผ์ด์ค๋ง๋ค ์์ฑ๋๋ ํธ๋ผ์ด ๊ทธ๋ํ์ ์ผ๊ด์ฑ์ ์ ์ ๋ณ์๋ก ์ฒดํฌํ์ต๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Java_5052_์ ํ๋ฒํธ๋ชฉ๋ก {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i=0;i<T;i++) {
int n = Integer.parseInt(br.readLine());
Trie trie = new Trie();
for(int j=0;j<n;j++) {
String word = br.readLine();
trie.insert(word);
}
if(Trie.isConsistency) System.out.println("YES");
else System.out.println("NO");
Trie.isConsistency=true;
}
}
}
class Trie {
static boolean isConsistency=true;
// ์ ์ ๋ณ์
boolean isWord = false;
boolean existChild = false;
// ๋ํดํธ ์์ฑ
Trie[] childTrie = new Trie[10];
void insert(String word) {
int len = word.length();
Trie nowTrie = this;
for(int i=0;i<len;i++) {
int nextNum = word.charAt(i)-'0';
if(nowTrie.childTrie[nextNum]==null) nowTrie.childTrie[nextNum] = new Trie();
nowTrie = nowTrie.childTrie[nextNum];
// ์์ ๊ทธ๋ํ๋ก ์ด๋
if(i==len-1) nowTrie.isWord=true;
else nowTrie.existChild=true;
if(nowTrie.isWord && nowTrie.existChild) isConsistency = false;
}
}
}
cpp๋ก ์ง ์ฝ๋๋ ์ฒจ๋ถํฉ๋๋ค.
#include <iostream>
#include <cstring>
using namespace std;
bool isConsistent = true;
struct Trie {
bool isWord;
bool existChild;
Trie* childTrie[10];
Trie() {
isWord = false;
existChild = false;
for (int i = 0; i < 10; i++) childTrie[i] = nullptr;
}
~Trie() {
for (int i = 0; i < 10; i++) {
if (childTrie[i]) delete childTrie[i];
}
}
void insert(char* word) {
if (*word == '\0') isWord = true;
else {
int next = *word - '0';
if (!childTrie[next]) childTrie[next] = new Trie;
existChild = true;
childTrie[next]->insert(word + 1);
}
if (isWord && existChild) isConsistent = false;
}
};
int main(void) {
int T;
cin >> T;
for (int i = 0; i < T; i++) {
isConsistent = true;
Trie* trie = new Trie;
int N;
cin >> N;
for (int j = 0; j < N; j++) {
char word[11];
cin >> word;
trie->insert(word);
}
if (isConsistent) cout << "YES\n";
else cout << "NO\n";
delete trie;
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ณด์ ์์(2792) (0) | 2022.03.07 |
---|---|
[BOJ] ํด๋ํฐ ์ํ(5070) (0) | 2022.03.07 |
[BOJ] ํ์คํ ๊ทธ๋จ(1725) (0) | 2022.03.07 |
[BOJ] ๊ณฑ์ (1629) (0) | 2022.03.06 |
[BOJ] ํ์์ค๋ฐฐ์ (1931) (0) | 2022.03.06 |