[백준] 2869번(달팽이는 올라가고 싶다)

뱌·2022년 11월 10일

백준 문제풀이

목록 보기
21/159

백준 2869번


최종 제출 코드

import math

a, b, v = map(int, input().split())

A = v/(a-b)
B = a/(a-b)

print(math.ceil(A-B)+1)
  • 시간 제한이 있는 것을 보면 반복문으로 풀면 안되는 문제
  • 정상에서 미끄러지지 않는다는 가정이 없다면 (a - b)*x = v로 풀면 된다.
    이 경우의 값이 변수A이다.
  • A처럼 계산하면 실제로 구해야 하는 횟수보다 더 많이 구해진다.
    이때 얼마나 더 많이 구해지는지는 a와 b의 차이가 a에서 차지하는 비율에 달렸다. 즉, (a-b)의 값이 작을 수록 A에는 더 많은 값이 더해졌을 것이다.
    이 경우의 값이 변수 B이다.
  • 따라서, A에서 B를 빼주어 그 값을 올림 처리한다.
    이렇게 되면 정상에 도착하기 직전 상태가 된다.
  • +1을 해준다.

처음 제출한 코드

import math

a, b, v = map(int, input().split())

A = math.ceil(v/(a-b))
B = math.floor(a/(a-b))

print(A-B+1)
  • 횟수를 5.5번, 1.25번과 같은 식으로 세는게 맞지 않다고 생각해 두 값을 연산하기 전에 각각에 올림, 내림 처리를 해줬다.
  • B 값에 대해 왜 내림 처리를 해줬는지는 모르겠다..
  • 이 계산법이 맞지 않는 테스트케이스의 특징이 궁금하다..
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글