반응형
문제
https://www.acmicpc.net/problem/1072
1072번: 게임
김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시
www.acmicpc.net
코드
x, y = map(int, input().split())
z = (y * 100) // x
if z >= 99:
print(-1)
else:
ans = 0
start = 1
end = x
while start <= end:
mid = (start + end) // 2
if (y + mid) * 100 // (x + mid) <= z:
start = mid + 1
else:
ans = mid
end = mid - 1
print(ans)
설명
우선 기존 승률이 99퍼센트 이상이라면 어떻게 해도 100퍼센트에 도달이 불가능하기 때문에 제외해 준다.
그 외의 경우를 생각해야 하는데,
브루트포스로 해결하게 되면 입력 값이 10억이기 때문에 타임아웃이 난다.
따라서 이분 탐색으로 범위를 빠르게 좁혀서 탐색한다.
시작 지점은 1로 정해주고
끝 지점은 x로 정한다.
x인 이유는 승률이 98퍼센트 일 때,
x회 더 진행하게 되면 99퍼센트가 되기 때문에 최댓값은 x이다.
이후 이분 탐색을 진행해 준다.
만약 새로 계산된 승률이 기존 승률보다 작거나 같다면
start를 갱신해 준다.
그렇지 않다면 현재의 승률이 더 높은 셈이므로 정답을 우선 갱신해 주고
end를 갱신해 준다.
탐색을 마치고 최종적으로 ans를 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 6603: 로또 (0) | 2023.07.19 |
---|---|
[파이썬, Python] 백준 2417: 정수 제곱근 (0) | 2023.07.19 |
[파이썬, Python] 백준 15655: N과 M (6) (0) | 2023.07.17 |
[파이썬, Python] 백준 15654: N과 M (5) (0) | 2023.07.14 |
[파이썬, Python] 백준 1940: 주몽 (0) | 2023.07.13 |