본문 바로가기

알고리즘/백준

백준 14725 개미굴

https://www.acmicpc.net/problem/14725

 

14725번: 개미굴

첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N개가 주어진다.  (1 ≤ N ≤ 1000) 두 번째 줄부터 N+1 번째 줄까지, 각 줄의 시작은 로봇 개미 한마리가 보내준 먹이 �

www.acmicpc.net

 

트라이 문제다. 기존의 struct에서 alphabet 개수만큼 배열을 할당한 대신 map으로 바꾼것 말고는 동일하다 .

 

/* 개미굴 */

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

using namespace std;

void input();
void solve();

int N;
struct trieNode {
	bool is_terminal;
	map<string, trieNode*> trie;

	trieNode() {
		is_terminal = false;
		trie.clear();
	}

	void insert(vector<string> vs, int idx) {
		if (idx == vs.size()) {
			this->is_terminal = true;
			return;
		}

		if (trie.count(vs[idx]) == 0) {
			trie.insert(make_pair(vs[idx], new trieNode()));
		}

		trie.find(vs[idx])->second->insert(vs, idx + 1);
		return;
	}

	void iter(int depth) {
		for (auto iterator : trie) {
			for (int i = 0; i < depth; i++) 
				cout << "-";
			
			cout << iterator.first << '\n';;
			iterator.second->iter(depth + 2);
		}
	}
};

trieNode* root = new trieNode();

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	input();
	solve();

	return 0;
}

void input() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		int m; cin >> m;
		vector<string> v_s;
		for (int i = 0; i < m; i++) {
			string s; cin >> s;
			v_s.push_back(s);
		}

		root->insert(v_s, 0);
	}
}

void solve() {
	root->iter(0);
}

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

백준 11657  (0) 2020.08.30
백준 1865 웜홀  (0) 2020.08.30
백준 10165 버스 노선  (0) 2020.08.30
백준 1256 사전  (0) 2020.08.29
백준 17140 이차원 배열과 연산  (0) 2020.08.29