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