본문 바로가기

PS/백준

[BOJ] 백준 2869 달팽이는 올라가고 싶다 (Swift)

반응형

문제

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

풀이

IMG_0001

낮에는 A미터 올라가고, 밤에는 B미터 미끄러진다.
주의해야 할 점이 A미터를 올라갔을 때, 정상에 올라갔다면 미끄러지지 않는다.
while문을 통해서 구할 수 있겠지만, 이 문제는 시간제한이 0.15초 입니다.
또한 A, B, V의 범위가 (1 ≤ B < A ≤ V ≤ 1,000,000,000) 이므로,
A = 2, B = 1, V = 1,000,000,000 이라면... 약 10억번의 연산을 수행하는 while문으로는 시간안에 해결할 수 없을 것입니다.

그렇다면 수학적으로 한 번 접근해 봅시다.

구하려고 하는 해를 day라고 설정하고, 식을 적어봅시다.
처음에는 $day = V / (A - B)$ 라고 생각했었습니다.
하지만, 정상에 도달한다면 미끄러지지 않으므로, 맨 처음부터 V에서 B를 빼준 값을 구해줘야 합니다.
그래서 식은 $day = (V - B) / (A - B)$가 될 것입니다.

주의해야할 점은 실수 자료형으로 계산을 해주고 그 값을 올림 처리를 해줘야 합니다.
올림처리는 ceil() 메서드를 사용할 수 있습니다.

소스코드

후기

수학식을 구한다면 수학식만 적용해주면 쉽게 풀 수 있는 문제인 것 같습니다.

반응형