아무코딩

[2018 KAKAO BLIND RECRUITMENT 3차] 자동완성 본문

알고리즘/프로그래머스

[2018 KAKAO BLIND RECRUITMENT 3차] 자동완성

동 코 2020. 4. 19. 22:50

문제풀이

 

 

트라이 연습으로 매우 좋은 문제였다. 마지막에 카운트를 셀때는 조금 방법이 헷갈려서 시간이 걸린것 같다. 아직 트라이가 익숙하지 않아 전에 짰던 코드를 계속 참고하며 짜는데 연습이 좀더 필요한것 같다. 

 

 

카운트를 셀때 count가 1인 경에는 더 내려가서 셀 필요가 없다 그때는 무조건 1개의 경우만 나오므로 

 

소스코드

더보기
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
61
62
63
64
65
66
67
68
69
70
71
72
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
int answer=0;
class Trie{
private:
    int count;//자식 개수
    bool finish;
    Trie* next[26];
public:
    Trie() : finish(false){
        count =0;
        for(int i=0;i<26;i++){
            next[i]=NULL;
        }
    }
    ~Trie(){
        for(int i=0;i<26;i++){
            if(next[i])
                delete next[i];
        }
    }
    void insert(const char* key){
        if((*key)=='\0'){//문자 끝일때
            if(count==1){
                finish=true;
            }
            return;
        }
        
        int cur = (*key)-'a';
        if(!next[cur]){//다음이 NULL
            next[cur] = new Trie();
        }
        next[cur]->count +=1;
        next[cur]->finish =false;
        next[cur]->insert(key+1); //그다음 글자 insert
    }
    void countNum(){
        if(count>0){
            answer += count;
            if(count==1)
                return;
        }
        if(finish){//finish면 끝
            return;
        }
        for(int i=0;i<26;i++){
            if(next[i])
                next[i]->countNum();
        }
    }
};
 
int solution(vector<string> words) {
    
    Trie* trie = new Trie();
    for(int i=0;i<words.size();i++){
        trie->insert(words[i].c_str());
    }
    trie->countNum();
    
    return answer;
}
 
int main(void) {
    cout<<solution({ "go","gone","guild" })<<endl;
}
 
 
 
 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/17685

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments