Koder / 박성훈
article thumbnail

트라이 자료구조를 사용하는 문제.

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

 

7432번: 디스크 트리

갑자기 맥북이 상근이의 손에서 떨어졌고, 화면이 켜지지 않았다. AS센터에 문의해보니 수리비가 97만원이 나왔고, 상근이는 큰 혼란에 빠졌다. 돈도 중요하지만, 상근이는 그 속에 들어있는 파

www.acmicpc.net

\ 기호를 기준으로 문자열을 토큰화 해서,

이 토큰화된 문자열들이 들어가는 trie 자료구조를 만들어 준다음

얘를 dfs로 순회하면서 출력해주면 정답을 받을 수 있다.

trie 자료구조에 저장할때 std::map을 사용했는데

자동으로 정렬되면서

각 서브 디렉토리는 사전순으로 출력해야 하며,

를 충족시킬 수 있다.

 

더보기
#include <bits/stdc++.h>
using namespace std;

struct trie{
	map<string,trie*> child;
	
	void insert(vector<string> &v, int idx){
		if(v.size() > idx){
			string nxt = v[idx];
			if(child.find(nxt) == child.end()) child[nxt] = new trie;
			child[nxt]->insert(v, idx+1);
		}
		return;
	}
	
	void dfs(int space){
		for(auto k : child){
			for(int i=0; i<space; i++) cout << " ";
			cout << k.first << "\n";
			
			k.second->dfs(space+1);
		}
	}
}g;


int main(){
	int n;
	string input;
	string token;
	vector<string> v;
	cin >> n;
	for(int i=0; i<n; i++){
		v.clear();
		token = "";
		cin >> input;
		for(auto k : input){
			if(k == '\\'){
				v.push_back(token);
				token = "";
			}
			else{
				token += k;
			}
		}
		v.push_back(token);
		g.insert(v, 0);
	}
	
	g.dfs(0);
	return 0;
}

깔끔하게 AC.

반응형