백준 1072번 게임
< 백준 1072번 게임 - 마포 코딩박 >
사용한 알고리즘: 수학
현재까지의 게임 횟수와 이긴 횟수 가 주어지고, 앞으로는 모두 이긴다고 가정했을 때, 몇판을 더 해야 승률이 증가하는지 구하는 문제였습니다.
풀이는 다음과 같습니다.
(1)
X: 전체판수, Y: 이긴횟수, Z: 승률이라고 하면, Z = 100*(Y/X) 입니다.
승률이 Z+1 이 되기 위한 추가 판수를 K 라 하면, Z+1 = 100*(Y+K/X+K) 입니다.
따라서 K = ((Z+1)*X - 100*Y)/(99-Z) 입니다.
주의할 점은, Z를 계산할 때 Y/X*100 이라고 하면 안된고 100*Y/X라고 해야합니다.
(정확한 이유는... 모르겠습니다.)
또한 Z 가 이미 99 프로 이상이면, 100프로를 만들기는 불가합니다.
사용한 알고리즘: 수학
현재까지의 게임 횟수와 이긴 횟수 가 주어지고, 앞으로는 모두 이긴다고 가정했을 때, 몇판을 더 해야 승률이 증가하는지 구하는 문제였습니다.
풀이는 다음과 같습니다.
(1)
X: 전체판수, Y: 이긴횟수, Z: 승률이라고 하면, Z = 100*(Y/X) 입니다.
승률이 Z+1 이 되기 위한 추가 판수를 K 라 하면, Z+1 = 100*(Y+K/X+K) 입니다.
따라서 K = ((Z+1)*X - 100*Y)/(99-Z) 입니다.
주의할 점은, Z를 계산할 때 Y/X*100 이라고 하면 안된고 100*Y/X라고 해야합니다.
(정확한 이유는... 모르겠습니다.)
또한 Z 가 이미 99 프로 이상이면, 100프로를 만들기는 불가합니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
double X, Y; | |
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); | |
cin >> X >> Y; | |
// Y/X*100 은 안된다. | |
double Z = floor(100*Y/X); | |
if(Z>=(double)99) cout << -1 << '\n'; | |
else{ | |
int ans = (int)ceil((X*Z+X-100*Y)/(99-Z)); | |
cout << ans << '\n'; | |
} | |
return 0; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!