본문 바로가기
프로그래머스

자동완성 C++

by paysmile 2022. 3. 25.

https://programmers.co.kr/learn/courses/30/lessons/17685

 

코딩테스트 연습 - [3차] 자동완성

자동완성 포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g

programmers.co.kr

#include <string>
#include <vector>
#include <map>

using namespace std;

class Trie {
private:
	int count = 0;
	map<char,Trie *> child;
public:
	void insert(string str) {
		Trie *now = this;
		for (int i = 0; i < str.size(); i++) {
			if (now->child[str[i]] == nullptr) {
				now->child[str[i]] = new Trie;
			}
			now = now->child[str[i]];
			now->count++;
		}
	}

	int AutoComplete(string str) {
		Trie *now = this->child[str[0]];
		int index = 1;
		for (int i = 1; i < str.size(); i++) {
			if (now->count > 1) {
				now = now->child[str[i]];
				index++;
			}
		}
		return index;
	}
};

int solution(vector<string> words) {
	int answer = 0;

	Trie root;
	for (int i = 0; i < words.size(); i++) {
		root.insert(words[i]);
	}

	for (int i = 0; i < words.size(); i++) {
		answer += root.AutoComplete(words[i]);
	}

	return answer;
}

'프로그래머스' 카테고리의 다른 글

멀리 뛰기 C++  (0) 2022.03.25
스티커 모으기(2) C++  (0) 2022.03.25
단속카메라 C++  (0) 2022.03.25
섬 연결하기 C++  (0) 2022.03.25
순위 C++  (0) 2022.03.24