BOJ - 개미굴(14725)
문제(링크)
각 정보들을 사전 순서대로 정렬합니다.
정렬된 각 정보들을 공백마다 끊어가며 탐색합니다.
현재까지 탐색된 문자열을 map을 이용해 방문을 체크하고
만약 방문한 곳이면 "--"을 depth에 추가만 하고 더 탐색합니다.
만약 방문하지 않았다면 현재 depth + (현재 층의 문자열) 을 출력 문자열에 추가합니다.
그리고 출력 문자열에 개행 문자를 추가하고, depth 에 "--"을 추가해 층을 늘려줍니다.
모든 문자열에 대해 위 작업을 수행합니다.
각 정보들을 사전 순서대로 정렬합니다.
정렬된 각 정보들을 공백마다 끊어가며 탐색합니다.
현재까지 탐색된 문자열을 map을 이용해 방문을 체크하고
만약 방문한 곳이면 "--"을 depth에 추가만 하고 더 탐색합니다.
만약 방문하지 않았다면 현재 depth + (현재 층의 문자열) 을 출력 문자열에 추가합니다.
그리고 출력 문자열에 개행 문자를 추가하고, depth 에 "--"을 추가해 층을 늘려줍니다.
모든 문자열에 대해 위 작업을 수행합니다.
#include<iostream> #include<algorithm> #include<math.h> #include<string.h> #include<string> #include<vector> #include<queue> #include<map> using namespace std; #define FIO ios_base::sync_with_stdio(false); cin.tie(NULL) #define pii pair<int, int> int N; priority_queue<string, vector<string>, greater<string>> pq; map<string, bool> hm; int main(void) { FIO; cin >> N; for (int i = 0; i < N; i++) { int x; cin >> x; string all = ""; for (int j = 0; j < x; j++) { string str; cin >> str; all += str + ' '; } pq.push(all); } while (!pq.empty()) { string str = pq.top(); pq.pop(); string out = ""; string depth = ""; int s = 0; for (int i = 0; i < str.size(); i++) { if (str[i] == ' ') { string sub = str.substr(s, i - s); s = i + 1; if (hm.find(str.substr(0, i)) != hm.end()) { depth += "--"; continue; } else { hm.insert(make_pair(str.substr(0, i), true)); out += depth + sub; } } else { continue; } out += "\n"; depth += "--"; } cout << out; } }
댓글
댓글 쓰기