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

BOJ(2869) - Kotlin

by 클리마 2022. 5. 28.
728x90

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

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

출력

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

 

나의 접근방법

하루가 지날 때마다 결국 A-B만큼 이동하기 때문에 그만큼 곱해줄 때 V보다 큰 수를 찾는 방정식을 구함 + 정상에 오르면 내려오지 않기때문에 B를 한번만 상쇄할 수 있도록 더해준다. 그러면 방정식은

x >= (v-b) / (a-b)

기본적으로 처음 하루는 더해줘야 하기 때문에 모든 답에는 +1을 기본적으로 해준다. 거기에 (v-b) % (a-b)가 0이 아니면 하루동안 올라가는 길이보다 조금 덜 남았기 때문에 하루를 더 추가해서 1을 추가로 더해준다.

코드

import java.util.Scanner

fun main() = with(Scanner(System.`in`)) {
	val a = nextInt()
	val b = nextInt()
	val v = nextInt()

	// (v-b) % (a-b)가 0이면 첫날인 +1만, 0이 아니면 추가로 +1을 더 해준다.
	print(if ((v-b)%(a-b) == 0) (v-a)/(a-b)+1 else (v-a)/(a-b)+2 )
}

 

728x90

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

BOJ(11050) - Kotlin  (0) 2022.05.31
BOJ(1008) - Kotlin  (0) 2022.05.29
BOJ(2839) - Kotlin  (0) 2022.05.27
BOJ(2775) - Kotlin  (0) 2022.05.26
BOJ(1259) - Kotlin  (0) 2022.05.24