https://www.acmicpc.net/problem/1072
1072번: 게임
김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시
www.acmicpc.net
시간 초과
'''
1072번: 게임 / silver 3
'''
game, win = map(int, input().split())
odds = int(win / game * 100)
new_odds = -1
if odds == 100:
print(-1)
else:
x = 1
while new_odds != odds + 1:
new_odds = int((win + x) / (game + x) * 100)
x += 1
print(x - 1)
정답
'''
1072번: 게임 / silver 3 / 이분탐색
'''
game, win = map(int, input().split())
rate = (win * 100) // game
if rate >= 99:
print(-1)
else:
res = 0
start = 1
end = game
while start <= end:
mid = (start + end) // 2
new_odds = (win + mid) * 100 // (game + mid)
if new_odds <= rate:
start = mid + 1
else:
res = mid
end = mid - 1
print(res)
이분 탐색 문제
- start, mid, end 통해서 조건에 맞는 최솟값 찾기
부동 소수점 오차 주의
- Python 에서 승률 계산 시 올바른 계산 방법
rate = (win * 100) // game
rete = int((win * 100) / game)
- 잘못된 방법
rate = int(win / game * 100)
'백준 문제풀이' 카테고리의 다른 글
2110번: 공유기 설치 / gold 4 / 이분탐색 (0) | 2023.02.14 |
---|---|
2776번: 암기왕 / silver 4 / set (0) | 2023.02.13 |
10825번: 국영수 / silver 4 / 정렬 (0) | 2023.02.11 |
10211번 : Maximum Subarray / silver 4 / 누적합 (0) | 2023.02.10 |
16139번: 인간-컴퓨터 상호작용 / silver 1 / 누적합, ord() (0) | 2023.02.09 |