728x90
https://www.acmicpc.net/problem/2869
알고리즘 분류 : 수학
코드
import math
A, B, V = map(int, (input().split()))
print(math.ceil((V-A)/(A-B))+1)
코드 풀이
반복문으로 문제를 접근하면 원하는 값은 출력될 것이나 시간 초과로 오답처리가 된다.
따라서 그냥 공식을 하나 만들어서 바로 출력하는 방법으로 해결해야 했다.
이동한 시간(일 수) = 도달해야 할 거리 / 하루 동안 이동한 거리이다.
낮에 A만큼 올라갔다가 밤에 B만큼 다시 내려오게 되므로 하루 동안 이동한 거리는 A-B라고 할 수 있다.
그러나 도달해야 할 거리를 V로 잡으면 문제가 생긴다.
어떤 값을 주던간에 달팽이가 V에 도달하는 것은 항상 낮이 된다.
달팽이의 이동거리에서 A만큼 덜 갔다는 것은 도착까지 걸리는 일 수에 하루를 빼준 것과 같으므로
이동한 시간을 V-A로 잡는다면 (V-A) / (A-B) + 1 을 하면 이동한 시간에 대한 값을 얻어낼 수 있다.
자연수 1을 하루의 시간으로 잡았으므로 (V-A) / (A-B) + 1의 값에 소수점이 붙어있다면 하루가 더 초과된 시간이므로 ceil함수를 통해 올림 처리를 해주었다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[python] 백준 4673 : 셀프 넘버 (0) | 2022.02.05 |
---|---|
[python] 백준 11050 : 이항 계수 (0) | 2022.02.05 |
[python] 백준 2839 : 설탕 배달 (0) | 2022.02.05 |
[python] 백준 1259 : 팰린드롬수 (0) | 2022.02.04 |
[python] 백준 2798 : 블랙잭 (0) | 2022.02.04 |