https://www.acmicpc.net/problem/4358
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
#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에 저장한 뒤에 백분률을 구하여 출력해주면 됩니다.