[BOJ] 16470 A Homogeneous Country

통계 잘 몰라도 풀 수 있어요

0. 들어가기

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줄에만 존재한다 ;ㅁ;