[BOJ] 16470 A Homogeneous Country
통계 잘 몰라도 풀 수 있어요
Table Of Contents
0. 들어가기
- 문제 링크 : https://www.acmicpc.net/problem/16470
- 정답 코드 : http://boj.kr/9cdbf2bf86dc4d3286368cbe422f5467
1. 문제 요약
- 가 계급
p_j
의 상대 도수일때,j
를 구하라.1 - \sum_{n}^{j = 1}p_j^2
2. 풀이 정리
map<string, int>
로 나라 이름의 등장 횟수를 저장한다.- map을 순회하며
- 각 나라의 를 구한다
p_j
p_j = country_count / total_count
- sum에 의 제곱을 계속 합한다.
p_j
sum += p_j * p_j
- 각 나라의
- 을 출력한다.
1 - \text{sum}
3. 구현
입력의 끝이 따로 지정되지 않았기 때문에 cin.eof()
를 이용해서 반복문을 처리해야 한다.
#include <iostream> #include <string> #include <map> using namespace std; map<string, int> m; int n; double sum; int main() { while (true) { string C; cin >> C; if (cin.eof() == true) break; n++; // 이미 m이 존재하는 경우 if (m.find(C) != m.end()) { m[C]++; } else { m[C] = 1; } } for (auto j = m.begin(); j != m.end(); j++) { double p_j = (double)(j -> second) / (double)n; sum += p_j * p_j; } cout << 1 - sum; return 0; }
4. 여담
- 문제에 대한 모든 정보값은 마지막 2줄에만 존재한다 ;ㅁ;