BOJ - 개미굴(14725)

문제(링크)

각 정보들을 사전 순서대로 정렬합니다.

정렬된 각 정보들을 공백마다 끊어가며 탐색합니다.
현재까지 탐색된 문자열을 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;
 }
 
}

댓글

이 블로그의 인기 게시물

HTML - input file 버튼 꾸미기

HTML - 이미지 미리보기(jQuery 없이)

BOJ - DNA 유사도(2612)