문제 링크: https://www.acmicpc.net/problem/4358

 

map을 사용하면 됩니다 (<이름, 나온 횟수>)

나무 이름 사이 공백이 있을 수 있으니 getline으로 한줄씩 입력받고, 나무 이름으로 키를 찾아서 나무의 count를 1 올려주면 됩니다

출력할 때 나무 이름 사전순으로 출력해야 되고, 백분율 소수점 4자리까지 출력해야 하는 점을 주의하세요

#include <bits/stdc++.h>
using namespace std;

map<string, int> m;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	string s;
	int cnt=0;
	while (getline(cin, s)) {
		if (m.find(s) == m.end()) {
			m[s] = 1;
		}
		else {
			++m[s];
		}

		++cnt;
	}

	cout << fixed;
	cout.precision(4);
	for (auto it = m.begin(); it != m.end(); ++it) {
		cout << it->first << ' ' << it->second*100 / (double)cnt << '\n';
	}

	return 0;
}
반응형