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

 

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

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

www.acmicpc.net

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

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

출력

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

풀이

1. 처음에는 쉽게 생각하고 while문으로 풀었다.

a,b,v = map(int,input().split())
day = 0
tree = 0
while tree<v:
    day += 1
    tree += a
    if tree == v:
        break
    tree -= b

print(day)

이랬더니 마지막 100 99 100000000 에서는 시간 초과가 떠부렀다

어쩐지 쉽게 풀리더라니 ㅎ

바로 구글링해봤당

 

2. 반복문 안쓰고 하기 (math 모듈, sys 모듈 사용)

import sys
import math

a,b,v = map(int,sys.stdin.readline().split())
day = (v-b)/(a-b)
print(math.ceil(day))

공식으로 표현해보면 ax-b(x-1) = v 이고 이거를 x에 관해 정리하면 v = (v-b)/(a-b) 

x-1 인 이유는 정상에 올라가면 미끄러지지 않으므로~!

math 모듈의 ceil 함수를 이용하여 올림해줘서 print한다. 끝

참고 : 내림은 floor 함수~ 

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

x = (v-b)/(a-b)
if x == int(x):
    print(int(x))
else:
    print(int(x) + 1)

** 꼭 math랑 sys를 이용해야하는 건 아님

복사했습니다!