Approach
전체에서 몇 퍼센트 해당하는지를 파악하는 것이므로, 쿼리에 대한 모든 정보를 받고 처리해야 한다. 이 부분에서 오프라인 쿼리 문제임을 인식해주면 된다. 추가적으로 Map container를 활용해주면 해당 set안에 몇 개 들어있는 상황인지를 쉽게 파악할 수 있다.
+ 어디까지 들어올지 모르는 상황이므로 while(getline(cin, t))를 사용하는 점을 유의깊게 보도록 하자.
+ cin.precision의 경우 정수부와 소수부의 자리수 개수의 합을 지정해주는 것이다. 소수점 이후의 자리부분을 설정하려면 cout << fixed를 처리해주면 된다.
Code
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
int main(void){
fastio;
int total = 0;
string t;
map<string, int> set_value;
while(getline(cin, t)){
if(set_value.find(t) == set_value.end()){
set_value[t] = 1;
}
else set_value[t] += 1;
total++;
}
for(map<string,int>::iterator it = set_value.begin(); it != set_value.end(); it++){
cout << fixed;
cout.precision(4);
cout << it -> first << " " << (float) (it -> second * 100) / total << "\n";
}
return 0;
}