[백준/BOJ] 백준 4358번 : 생태학

2021. 2. 7. 22:55알고리즘 문제풀이

www.acmicpc.net/problem/4358

 

4358번: 생태학

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

www.acmicpc.net

(cin.eof())를 통해 종료 조건을 확인하는 것에 주의하였고, map<string, int> tree를 통해 나무의 정보(나무 이름, 개수)를 저장하여 문제를 해결했다.

 

코드

#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

map<string, int> tree;
map<string, int>::iterator it;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int cnt = 0;

	while (1)
	{
		string input;
		getline(cin, input);

		if (cin.eof()) 
			break;

		cnt++; //총 개수 세기

		it = tree.find(input);

		if (it == tree.end()) //처음 발견한 나무 일때
		{
			tree.insert(make_pair(input, 1));
		}

		else //이미 저장했던 나무일때
		{
			(*it).second++;
		}
	}

	for (it = tree.begin(); it != tree.end(); it++)
	{
		double value = (double)(*it).second * 100 / cnt;

		cout << fixed;
		cout.precision(4);
		cout << (*it).first << " " << value << "\n";
	}



	return 0;
}