[BOJ] 15595 : 정답 비율 계산하기

15595 : 정답 비율 계산하기

풀이

문자열처리

백준문제를 풀면서 정답률이 단순히 정답수/제출수*100은 아니구나 생각만 했지

어떻게 계산하는지는 알아보지 않았었다. 궁금해서 살펴보니까 이 문제와 같이 계산을 한다고 한다.

(맞춘사람이 계속 맞춰도 정답률은 변동이 없다. 즉, 이부분 예외처리를 해줘야한다)

Cout의 소수 정밀도를 위해서 iomanip 라이브러리의 setprecision을 사용했고,

map<string,int> 컨테이너로 문자열 중복을 체크할겸 숫자도 더해줬다.

코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <queue>
#include <string>
#include <map>
#include <iomanip>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cout << setprecision(16);
   int n;
    cin >> n;
    int num, result, me, t, l, len;
    string str;
    map<string,int> m;
    for (int i = 0; i < n; i++) {
        cin >> num >> str >> result >> me >> t >> l >> len;
        if (str != "megalusion") {
            if (m.find(str) != m.end()) {
                if (m[str] < 0) {
                    if (result == 4) {
                        m[str] *= -1;
                    }
                    else {
                        m[str]--;
                    }
                }
            }
            else {
                if (result == 4) {
                    m[str] = 0;
                }
                else {
                    m[str]=-1;
                }
            }
            
        }
    }
    int cnt = 0;
    int totalMiss = 0;
    for (auto x : m) {
        if (x.second >= 0) {
            cnt++;
        }
        if (x.second > 0) {
            totalMiss += x.second;
        }
    }
    if (cnt == 0) {
        cout << 0;
    }
    else {
        double avg = (double)cnt / (double)(cnt + totalMiss) * 100.0;
        cout << avg;
    }
    return 0;
}
Written on March 23, 2019