백준 1072 게임

wook2·2022년 3월 7일
0

알고리즘

목록 보기
70/117

값을 증가시켜가면서 값이 바뀌는 특정 지점을 찾아야 하는 문제였다.
값을 증가시키다 어느 순간 문제 조건에 해당되는 부분이 바뀌는 지점이 생기는데, 이를 이분탐색을 이용해 해결할 수 있었다.
그 어떤 지점이 바뀌기 시작하는 지점을 찾아야 하는데,
1부터 최대 10억까지 답이 가능하기 때문에, left값은 1, right값은 10억을 넣어주었다.
또한 left <= right 조건이라면 left, right, mid값이 다 같은 경우 반복문이 끝나지 않기 때문에, left < right로 조건을 설정해주고 right값을 바꿔야 하는 경우 가능한 범위가 [mid,right] 이고 left값을 바꿔야 하는 경우 가능한 범위가 [mid + 1, right]이기 때문에 right = mid 와 left = mid + 1로 조건을 세팅하였다.

또한 z값을 계산하는 과정에서 z = y*100/x 로 계산을 하면, 제출시 틀린 결과를 반환하는데, 이는 파이썬은 부동소수점 방식을 사용하기 때문에 소수 계산에서 정확한 수를 계산하지 못한다. 이 때문에 //를 이용해 몫을 구하는 방법을 사용하여야 한다.

x,y = map(int,input().split())
z = (y*100) // x
if z >= 99:
    print(-1)
else:
    left = 0
    right = 1000000000
    answer = 0
    while left < right:
        mid = (left + right) // 2
        if (y+mid)*100 // (x+mid) >= z+1:
            right = mid
        else:
            left = mid + 1
    print(left)
profile
꾸준히 공부하자

0개의 댓글