반응형

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

 

14725번: 개미굴

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

www.acmicpc.net

 

트라이를 이용하여 풀었습니다.

로봇 개미가 얻어온 정보들을 트라이에 삽입해준 뒤,

저장된 모든 먹이 정보들을 오름차순 정렬하여 탐방하며 출력해주었습니다.

 

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;

int n, k;

class Trie {
private:
	map<string, Trie*> m;
public:
	~Trie() {
		for (auto it = m.begin(); it != m.end(); it++) {
			delete it->second;
		}
	}

	void insert(vector<string>& foods, int idx) {
		if (foods.size() == idx) return;
		Trie* find;
		auto f = m.find(foods[idx]);
		if (f == m.end()) {
			find = new Trie();
			m.insert({ foods[idx], find});
		}
		else {
			find = f->second;
		}
		find->insert(foods, idx + 1);
	}

	void dfs(int depth) {
		vector<pair<string, Trie*>> temp;
		for (auto it = m.begin(); it != m.end(); it++) {
			temp.push_back({ it->first, it->second });
		}
		sort(temp.begin(), temp.end());
		for (int i = 0; i < temp.size(); i++) {
			for (int j = 0; j < depth; j++) {
				cout << "--";
			}
			cout << temp[i].first << "\n";
			temp[i].second->dfs(depth + 1);
		}
	}
};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	Trie* root = new Trie();

	cin >> n;

	vector<string> temp;
	string str;
	while (n--) {
		temp.clear();
		cin >> k;
		while (k--) {
			cin >> str;
			temp.push_back(str);
		}
		root->insert(temp, 0);
	}
	root->dfs(0);

	delete root;
}
반응형

'Algorithm' 카테고리의 다른 글

백준 16954 : 움직이는 미로 탈출  (0) 2021.11.16
백준 16932 : 모양 만들기  (0) 2021.11.16
백준 1449 : 수리공 항승  (0) 2021.11.16
백준 1744 : 수 묶기  (0) 2021.11.16
백준 1080 : 행렬  (0) 2021.11.16

+ Recent posts