[백준/Python] 1072번 - 게임

Sujin Lee·2022년 6월 3일
0

코딩테스트

목록 보기
59/172
post-thumbnail

문제

1072번 - 게임

문제 해결 과정

  • 방정식을 통해 해결하라
  • 올림, 반올림, 버림을 잘 사용하라 (math)
    • 반올림: .round()
    • 올림: .ceil()
    • 버림: .trunc()
    • 내림: .floor()
  • int형끼리 나누면 int형으로 소수점은 버려진다

시행 착오

  • 예제는 통과했지만 시간 초과 -> 방정식을 사용하라..
import sys
import math

x, y = map(int, sys.stdin.readline().split())

z = math.trunc(y / x * 100)

new_x = x
new_y = y

while True:
  if math.trunc(new_y / new_x * 100) != z:
    print(new_x - x)
    break
  if new_x == new_y:
    print(-1)
    break
  new_x = new_x + 1
  new_y = new_y + 1
  • 방정식을 풀어서 식을 만들었는데 버림과 반올림만 생각하고있어서 정답이 제대로 안나옴. 소수점이하값들이 존재할 때 ceil올림을 해줘야 함
    -z = int(y / x * 100)이 아닌 int(y * 100 / x) 으로 식을 세워야 함
    • x , y 가 int형이기 때문에 y / x에서 소수점 이하 값들은 버려지기 때문에
    • 실수의 연산은 부정확할 수가 있으므로 사용에 주의해야 함
    • 무한 소수가 나올 수 있지만, 컴퓨터 연산의 메모리는 이를 정확히 커버할 수 가 없으므로 예상과는 다른 결과가 나올 수 있음
  • z = int(y * 100 / x) 으로 식을 세우면 ZeroDivisionError 에러가 떠서 try~catch 로 예외 처리해줌

풀이

import sys
import math

x, y = map(int, sys.stdin.readline().split())

z = int(y * 100/ x)

try:
  if x == y:
      print(-1)
  else:
    print(math.ceil((100*y-((z+1)*x))/(z-99)))
except ZeroDivisionError:
  print(-1)
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글