Coding/백준

[1072번] 게임 (★)

sinabro_dy 2022. 7. 25. 16:25
문제

 

참고한 코드
import sys
input = sys.stdin.readline

x, y = map(int, input().split())
z = (y * 100) // x

if z >= 99:
    print(-1)
else:
    answer = 0
    left = 1
    right = x
    
    while left <= right:
        mid = (left + right) // 2
        if (y+mid)*100 // (x+mid) <= z:
            left = mid + 1
        else:
            answer = mid
            right = mid - 1
            
    print(answer)

> 참고한 블로그

https://hillier.tistory.com/70

 

[백준 1072] 게임 (python)

1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코

hillier.tistory.com

> 보기에 풀 수 있을거 같은데... 정말 안풀렸고, 결국 못풀었다 ㅜㅜ

 

 

내가 해보는 코드 설명
import sys
input = sys.stdin.readline

> '이것이 코딩테스트' 책에서도 이 코드를 추천했었는데, 나도 이제부터 써먹어야겠다!!

> 외우자!!

 

x, y = map(int, input().split())
z = (y * 100) // x

> 처음에 코드를 int(input().split()) 으로 작성해서 계속 error가 발생했다... map(int, input().split()) 그냥 외우자!!

> 그리고, z = int( (y / x) * 100) 으로 코드를 작성하면 결과가 틀렸다고 나온다!! 그 이유는 python에서는 부동소수점 오차가 나서 정확하지 않다고 한다고 한다. 위의 내가 참고한 블로그에서 그렇게 설명을 해주셨다.

 

if z >= 99:
    print(-1)
else:
    answer = 0
    left = 1
    right = x
    
    while left <= right:
        mid = (left + right) // 2
        if (y+mid)*100 // (x+mid) <= z:
            left = mid + 1
        else:
            answer = mid
            right = mid - 1
            
    print(answer)

> 처음 z >= 99 이 부분을 z == 100 으로 해야되는거 아니야?? 라고 생각을 했었다. 하지만, 처음부터 100이 아니라면, 절대 100으로 진급할 수 없다는 것을 깨닫게 되었다. 어차피 100은 무리!!

> 이분탐색을 공부해서 적용하려고 했는데, 이것은 퀵 정렬과도 유사한거 같다. 허튼, 잘 참고해서 다음 이분 탐색 문제에서는 잘 써먹어보자!!