
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를 이용해야하는 건 아님
'Python > Backjoon' 카테고리의 다른 글
[Python] 2839번 설탕배달 - 그리디알고리즘 (1) | 2023.05.11 |
---|---|
[Python] 2566번 최댓값 (2차원 배열) (0) | 2023.05.11 |
[백준/python] 2742번 기찍 n (0) | 2023.02.14 |
[백준/python] 10872번 팩토리얼 (0) | 2023.02.13 |
[백준/python] 1264번 모음의 개수 (0) | 2023.01.17 |