본문 바로가기

개발/알고리즘

[백준] 기본 수학 - 2869번 달팽이는 올라가고 싶다

반응형
 

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

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

www.acmicpc.net

입력

낮에 A미터 올라갈 수 있다. 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

풀이

달팽이가 올라가는데 걸리는 날을 X라고 가정하자
달팽이가 낮에 정상에 닿았을 때, 내려가지 않음으로 밤은 X - 1번이 걸린다
X*A - B*(X - 1) >= V

이를 X 위주로 구해봤을 때
AX - BX + B >= V
X(A - B) >= V - B
X >= (V - B) / (A - B) 가 성립한다

달팽이가 낮에 한걸음에 정상에 도착했다면 위 식이 성립하지만,
닿기 전 미끄러져 다시 올라가야할 경우가 있으니 남은 거리가 0인지 알아보자

 

Swift 전체 코드

let input = readLine()!.split(separator: " ")
let a = Int(input[0])!
let b = Int(input[1])!
let v = Int(input[2])!
let value = (v - b) / (a - b)

(v - b) % (a - b) != 0 ? print(value + 1) : print(value)
반응형