본문 바로가기
백준 알고리즘

백준 2869번 파이썬

by 코딩사무소장 2023. 7. 22.
반응형

 

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)

간결한 코드 완성.

반응형