본문 바로가기
백준 문제 풀이 & C++ 공부

백준 1072 C++

by daisy0461 2025. 2. 10.

이 문제에서 좀 놀랐던 부분이 있다.

코드에서 보면

	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