[문제보기]

 4358. 생태학

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

 

[풀이과정]

TRIE 알고리즘을 이용하여 문제를 풀려고 했지만, 질문 게시판을 참고하여 pair<int, int>와 sort()를 사용하여

더 쉽게 구현하였다.

https://www.acmicpc.net/board/view/43824

 

[소스코드]

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

vector<string> v;
vector<pair<string, float>> w;

int main(){
    string s;
    while(1){
        getline(cin, s, '\n');
        if(cin.eof() == true) break;
        v.push_back(s);
    }

    sort(v.begin(), v.end());

    w.push_back({v[0], 1});
    for(int i=1; i<v.size(); i++){
        if(v[i] != v[i-1]){
            w.push_back({v[i], 1});
        }
        else
            w.back().second++;
    }

    for(int i=0; i<w.size(); i++){
        w[i].second = w[i].second/v.size() * 100;
        cout << w[i].first << " ";
        printf("%.4f\n", w[i].second);
    }

    return 0;
}

 

[해결과정 중 실수한 부분]