[BOJ] 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