백준 알고리즘
백준 2869번 파이썬
코딩사무소장
2023. 7. 22. 09:53
반응형
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
나름 깔끔하게 변수명 지어서 만들어봤지만,,
시간초과로 인해 while문을 사용하면 안되는 문제인 듯하다.
A, B, V = map(int, input().split())
snail_now = 0
day = 0
while snail_now <= V:
day += 1
snail_now += A
if snail_now >= V:
break
snail_now -= B
print(day)
반복문 사용하지 말고 해결하는 법을 찾고있다.
가장 문제가 되는 것은 V에 도달하는데 턱걸이로 도달하는게 아니라
V-A 이상을 올라가는 수를 찾아야 하는 것이다. V와 V-A 사이의 수에 도달했다면 +1만 하면 되기 때문.
(V-A) <= (A-B)*n
처음 발상은 이런 식이었다.
A-B가 몇 번 반복해야 V-A와 V 사이에 도달할지 생각했다.
N = 으로 넘기면 쉽게 해결될 거라는 느낌이 왔다.
n = ((V-A)/(A-B))+1
실행하니 1.25와 같은 실수가 나왔다. 올림처리를 해야한다..
올림처리 함수를 몰라서 if문을 사용하면 복잡하게나마 풀 수 있지만 그냥 함수를 찾아봤다.
import math
n = math.ceil((V-A)/(A-B))+1
math라는 모듈을 import해서 올림처리하는 math.ceil() 함수를 사용했다.
내림처리는 math,floor()
반올림 처리는 내장함수인 round()
import math
A, B, V = map(int, input().split())
n = math.ceil((V-A)/(A-B))+1
print(n)
간결한 코드 완성.
반응형