본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 2869 달팽이는 올라가고 싶다

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

# 2869번 달팽이는 올라가고 싶다
a, b, v = map(int, input().split())
if a==b and b==v:
  print(1)

else:
  h_per_day = a - b
  d_1_h = v - a
  if d_1_h <= a:
    print(v // h_per_day + 1)
  else:
    day = (d_1_h // h_per_day)
    rest_h = d_1_h % h_per_day
    if rest_h == 0:
      print(day+1)
    else:
      z = (rest_h + a)//h_per_day +1
      day += z
      print(day)

처음 제출 했던 풀이.. 먼저 a,b,v가 같으면 첫날 바로 정상 도착하고 끝이라 1 출력하고 나머지 경우에 대해서만 생각하면 됩니다.

 

문제를 풀 때 정상에 도착하면 내려오지 않으니까 전체 길이 v에서 하루에 올라갈 수 있는 거리 a를 빼고 그 길이를 올라가는 날짜만 계산하면 될 거라생각했지만 틀렸습니다.

 

올라가는 거리를 전체 거리에서 뺄 게 아니라 내려오는 거리를 빼야 했습니다.

 

import math
a, b, v = map(int, input().split())
if a==b==v:
  print(1)
else:
  day = (v-b) / (a-b)
  print(math.ceil(day))

이렇게 단순한 코드로 구현을 할 수 있습니다.