티스토리 뷰

알고리즘/BOJ

[백준] 5670 휴대폰 자판

세진짱 2018. 7. 18. 01:05


어렵고 어렵고 어려운 트라이 문제다

트라이는 언제나 어렵다


트라이 그림을 그려보면 대충 문제 풀 수 있는 방법이 나온다

근데 처음에 짠 코드는 답도 잘나왔는데 계속 틀렸다. ㅎㅎ


단어를 다 입력 해주고 다시 하나하나 보며 

각 단어마다 몇번 눌러야 하는지 세주면 된다


세야하는 경우는

1) 루트일때

2) 길이 2개 이상일 때

3) 가는 도중에 끝나는 단어를 포함할 때 이다


트라이를 만들 때 NULL인 곳에 새롭게 동적할당 하면서 branch++ !


소스코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
const int MAXN = 1e5 + 3;
char arr[MAXN][88];
bool ini;
int n,ans;
struct Trie {
    bool vaild;
    bool exist;
    int branch;
    Trie* node[26];
    Trie() :vaild(false), exist(false), branch(0) {
        for (int i = 0; i < 26; i++) node[i] = 0;
    }
    ~Trie() {
        for (int i = 0; i < 26; i++)
            if (node[i]) delete node[i];
    }
    void add(const char* s) {
        if (*== 0) vaild = true
        else {
            int pos = *- 'a';
            if (node[pos] == NULL) {
                branch++; node[pos] = new Trie();
            }
            exist = true;
            node[pos]->add(s + 1);
        }
    }
    void check(const char*s) {
        if (*== 0return;
        if (ini) {
            ans++; ini = false;
        }
        else {
            if (branch >= 2) ans++;
            else if (vaild) ans++;
        }
        int pos = *- 'a';
        node[pos]->check(s + 1);
    }
};
int main() {
    while (scanf(" %d"&n) != -1) {
        Trie* root = new Trie();
        for (int i = 0; i < n; i++) {
            scanf(" %s"&arr[i]);
            root->add(arr[i]);
        }
        int total = 0;
        for (int i = 0; i < n; i++) {
            ini = true;
            ans = 0;
            root->check(arr[i]);
            total += ans;
        }
        printf("%.2lf\n", (double)total / n);
        delete root;
    }
}
cs


'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 12897 Candy  (0) 2018.07.18
[백준] 12888 완벽 이진 트리 도로 네트워크  (0) 2018.07.18
[백준] 12887 경로 게임  (0) 2018.07.18
[백준] 12873 기념품  (1) 2018.07.17
[백준] 12867 N차원 여행  (0) 2018.07.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
글 보관함