1 분 소요

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


문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.


입력

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


출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


예제
예제 입력1 예제 출력1
2 1 5 4
예제 입력2 예제 출력2
5 1 6 2
예제 입력3 예제 출력3
100 99 1000000000 999999901

풀이

이 문제는 달팽이가 나무 막대를 올라가는데 걸리는 날을 구하는 문제이다. 이 달팽이는 하루에 올라갈 수 있는 높이가 정해져있고 밤이 되면 다시 일정 미터를 미끄러져 내려온다고 한다. 나무 막대의 높이 = V 달팽이가 낮에 올라갈 수 있는 높이 = A 밤에 다시 미끄러져 내려오는 높이 = B

즉 달팽이가 하루동안 올라갈 수 있는 높이 A-B 또 올라가야할 높이는 V-B

달팽이가 나무 막대를 올라가는데 걸리는 시간은 (V-B)/(A-B)

import math

A,B,V = map(int,input().split())
day=(V-B)/(A-B)

만일 몫이 정수로 떨어진다면 나무 막대의 높이만큼 딱 도달한 것이다. 하지만 정수가 아닌 소수점으로 나왔다면 하루를 더 더해줘야 한다.

예를 들어 하루에 1.5일이 걸렸다고 하자 그렇다면 하루하고 0.5일이 더 걸렸다는 뜻이므로 2일이 되는것이다.

그렇다면 소수점을 반올림을 해서 출력 해줘야한다. math모듈 중 ceil를 이용한다.

print(math.ceil(day))

정답
import math

A,B,V = map(int,input().split())
day=(V-B)/(A-B)

print(math.ceil(day))

새로 알게 된 점

실수를 올림해서 정수로 출력되는 ceil함수를 알게 되면서 math모듈을 알게 되었다.

먼저 math 모듈은 수학과 관련된 다양한 함수들과 상수들이 정의되어 있다.

math을 사용하려면

import math

하여 사용할 수 있다.

다음으로 간단하게 어떤 것들이 있는지 알아보자

  1. math.ceil() ceil함수는 실수를 입력하면 올림하여 정수로 반환해주는 함수이다. 만약 정수를 입력하게 된다면 아무런 변화없이 정수로 반환되게 될것이다. 아래는 간단한 예제이다.
    >>>math.ceil(3.14)
    4
    >>>math.ceil(5.187)
    6
    >>>math.ceil(-4.23)
    4
    >>>math.ceil(5)
    5
    >>>math.ceil(-5)
    -5
    
  2. math.floor() floor함수는 ceil함수의 반대이다. 실수를 내림하여 정수로 반환하는 함수이다. floor의 성격은 ceil와 똑같다. 아래는 간단한 예제이다.
    >>>math.floor(3.14)
    3
    >>>math.floor(5.187)
    5
    >>>math.floor(-4.23)
    -5
    >>>math.floor(5)
    5
    >>>math.floor(-5)
    -5
    

태그:

카테고리:

업데이트:

댓글남기기