굥뷰를 햡시댜
[BOJ-4358] 생태학 본문
https://www.acmicpc.net/problem/4358
4358번: 생태학
문제 생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다. 입력 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다. 출력 주어진 각 종의 이름을 사전순으로 출력하고, 그 종이
www.acmicpc.net
풀고나서 알고리즘 분류를 봤더니 트라이로 구분되어 있었다.
나는 map을 사용했기 때문에 풀긴 풀었는데 정해는 아닌듯 하다.
- 풀이 방법
1. 입력을 받는다.
2. map에 문자열로 key값을 주면 자동으로 사전순으로 정렬된다.. 그래서 value값을 더했고
3. auto를 이용해 답을 구했다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <map>
#include <string>
using namespace std;
map<string, int> m;
int main(void) {
string str;
int cnt = 0;
while (1) {
getline(cin, str);
if (str.length() == 0) break;
cnt += 1;
m[str] += 1;
}
for (auto it = m.begin(); it != m.end(); it++) {
double temp = ((double)it->second / cnt);
cout << it->first;
printf(" %0.4lf\n", temp*100);
}
getchar();
getchar();
return 0;
}
Comments