[백준] 1072 - 게임
[백준] 1072 - 게임

[백준] 1072 - 게임

언어
Python
C++
난이도
Sliver 3
다시 풀어보기
다시 풀어보기
알고리즘 유형
구현
이분 탐색
작성자
박용성박용성
생성 일시
2024년 11월 10일

🖥 시작하며

99% 는 아무리 해도 100% 가 되지 않는다는 것을 유의하면 된다. 또한 X의 범위가 굉장히 크므로, 이진 탐색을 사용하는 직관을 활용하면 좋다.

⚙️ 코드

import sys input = sys.stdin.readline if __name__ == "__main__": X, Y = map(int, input().split()) Z = int(100 * Y / X) start = 0 end = X # 이진 탐색 # '최소' 이므로, end를 현재 게임 횟수로 저장한다. # 또한 승률이 이미 99라면 승률이 절대 변하지 않는다. answer = -1 while start <= end: middle = (start + end) // 2 # 새로운 승률 new_z = int(100 * (Y + middle) / (X + middle)) # 새로운 승률이 더 높다면, 더 작은 횟수가 있을지 탐색한다. if new_z > Z: answer = middle end = middle - 1 # 새로운 승률이 더 높지 않다면, 더 많은 횟수는 가능한지 탐색한다. else: start = middle + 1 print(answer)
#include <cmath> #include <iostream> using namespace std; int main() { long long X, Y; cin >> X >> Y; long long Z = Y * 100 / X; int start = 0; int end = X; // '최소' 승률을 찾기 위한 변수 int answer = -1; while (start <= end) { // 중간값 계산 long long middle = (start + end) / 2; // 새로운 승률 계산 long long new_z = (100 * (Y + middle) / (X + middle)); // 새로운 승률이 더 높다면, 더 작은 횟수가 있을지 탐색 if (new_z > Z) { answer = middle; end = middle - 1; } // 새로운 승률이 더 높지 않다면, 더 많은 횟수를 탐색 else { start = middle + 1; } } cout << answer << endl; return 0; }

📌 소감

댓글

guest