이 문제에서 좀 놀랐던 부분이 있다.
코드에서 보면
int nwp = (newPlayWinCount * 100) / newPlayCount;
이렇게 확률을 구하는 부분인데
int nwp = newPlayWinCount / newPlayCount * 100;
이렇게 작성하면 틀린 답으로 나온다.
이미 나눗셈을 먼저 실행해버리면 int는 정수형이기 때문에 뒤에 있는 소수점이 사라지기 때문이다.
그렇기에 정확한 값을 나타낼 수가 없어서 틀린 답으로 나온다.
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll playCount, playWinCount;
int percent;
bool check(ll num)
{
ll newPlayCount = playCount + num;
ll newPlayWinCount = playWinCount + num;
int nwp = (newPlayWinCount * 100) / newPlayCount;
//cout << " num : " << num << " nwp :" << nwp;
if (nwp == percent) return false;
else if (nwp > percent) return true;
else false;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> playCount >> playWinCount;
percent = (playWinCount * 100) / playCount;
ll lo = 1, hi = 1e9, mid, result = 1e9;
while (lo <= hi) {
mid = (lo + hi) / 2;
//cout << "percent : " << percent;
if (check(mid)) {
//cout << "is true\n";
result = min(result, mid);
hi = mid - 1;
}
else {
//cout << "is false\n";
lo = mid + 1;
}
}
if (percent >= 99) {
cout << -1;
}
else {
cout << result;
}
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 1269 C++ (0) | 2025.02.10 |
---|---|
백준 1269 C++ (0) | 2025.02.09 |
백준 7795 C++ (0) | 2025.02.09 |
백준 6236 C++ (0) | 2025.02.09 |
백준 2792 C++ (0) | 2025.02.07 |