본문 바로가기

백준 문제풀이

1072번: 게임 / silver 3 / 이분탐색

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)