250x250
Notice
Recent Posts
Recent Comments
Link
멋쟁이v의 개발일지
[백준 2869번] 달팽이는 올라가고 싶다(파이썬) 본문
728x90
320x100
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력
입력 1
2 1 5
입력 2
5 1 6
입력 3
100 99 1000000000
예제 출력
출력 1
4
출력 2
2
출력 3
999999901
풀이
이 문제의 계산식을 구해보면
A : 낮에 올라가는 거리
B : 밤에 내려가는 거리
V : 나무 높이
V = (A - B) * day -> day = V / (A - B)
일반적인 문제의 계산식은 이렇게 되지만
여기서 조건은 나무 정상에 도달했을 땐 내려오는 일이 없다고 하네요.
이것 때문에 저도 머리를 한참 썼습니다.
계산식을 다시 해보면
V <= (A * day) - {B * (day - 1)}
내려오는 거리를 날짜에서 하루를 빼줘야 됩니다.
날짜를 정답으로 출력하기 위해 계산식을 정리해보면
-> V <= day(A - B) + B
-> V - B <= day(A - B)
-> day >= (V - B) / (A - B)
최종 계산식은 이렇게 나오고 날짜는 소수점이 없기 때문에 x.1 x.2 x.3 ... x.9 는 전부 올림으로 처리합니다.
최종 계산식 : day = (V - B) / (A - B)
코드를 순서대로 작성한다면
1. 3개의 정수를 입력
2. 계산식을 변수에 저장
3. 실수형태의 변수를 math함수를 사용하여 올림 출력
※ import math 는 math.ceil() 과 math.floor() 가 있습니다.
- ceil은 천장을 의미하여 올림을 뜻하며, floor은 바닥을 의미하여 내림을 뜻합니다.
작성 코드
import math A, B, V = map(int, input().split()) day = (V - B) / (A - B) # 계산식 print(math.ceil(day)) # math 함수를 사용해서 올림하여 출력
728x90
320x100
'0년차 > 알고리즘(기본 수학)' 카테고리의 다른 글
[백준 2775번] 부녀회장이 될테야(파이썬) (2) | 2022.12.01 |
---|---|
[백준 10250번] ACM호텔(파이썬) (1) | 2022.12.01 |
[백준 1193번] 분수찾기(파이썬) (0) | 2022.11.30 |
[백준 2292번] 벌집(파이썬) (0) | 2022.11.30 |
[백준 1712번] 손익분기점(파이썬) (0) | 2022.11.29 |
Comments