백준 알고리즘 4358번 : 생태학

Zoo Da·2021년 8월 28일
0

백준 알고리즘

목록 보기
185/337
post-thumbnail

링크

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

문제

생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.

입력

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

출력

주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.

예제 입력 및 출력

풀이 코드(C++)

#include <bits/stdc++.h>
#define X first
#define Y second
#define pb push_back
#define sz(a) int((a).size())
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
using namespace std;
using ll = long long;
using ull = unsigned long long;
using dbl = double;
using ldb = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using wector = vector<vector<int>>;
using tiii = tuple<int, int, int>;

int main()
{
    fastio;
    map<string, float> m;
    float cnt = 0;
    string s;
    while (getline(cin, s))
    {
        cnt++;
        m[s]++;
    }
    for (auto i = m.begin(); i != m.end(); i++)
    {
        float k = (i->second / cnt) * 100; // 백분율
        cout << fixed << setprecision(4) << i->first << ' ' << k << "\n";
    }
    return 0;
}

getline을 사용해서 단어를 1줄씩 입력받고 입력 받은 모든 나무의 종들은 전부 map에 저장한 뒤에 백분률을 구하여 출력해주면 됩니다.

profile
메모장 겸 블로그

0개의 댓글