Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

프로젝트 모찌

백준코딩 [2869] 달팽이는 올라가고 싶다 - Kotlin 본문

백준코딩

백준코딩 [2869] 달팽이는 올라가고 싶다 - Kotlin

Project Mochi 2020. 9. 6. 19:59

백준코딩 2869번 '달팽이는 올라가고 싶다' 문제는 정수 달팽이의 하루 당 이동 거리가 주어지고 목적지까지의 거리가 주어졌을때 목적지까지 가는데 얼마나 걸리는가를 구하는 문제이다. 달팽이는 낮에 A미터 올라갈 수 있고, 밤에 잠을 자는 동안 B미터 미끄러진다. 그리고 정상에 도달한 후에는 미끄러지지 않는다.

 

입력은 첫째줄에 정수  A, B, V 가 공백으로 구분되어서 주어진다. 

 

문제 설명만 읽어보았을때는 크게 어려울 것이라고 느끼지 않았다. 달팽이는 하루에 무조건 (A-B)미터 이동하고 마지막 날에는 미끄러지지 않고 올라만 가기 때문에 while 문을 통해서  목적지인 V 에서 하루 당 이동거리인 (A-B)를 빼가는 방식으로 계산하려고 하였다.

 

하지만 역시나 정답률 26프로짜리 문제는 이유가 있는 법, 제출한 답안이 시간초과가 걸려 버렸다.

 

이유를 살펴보니, 일단 시간 제한 자체가 0.15초 (추가시간 없음)이며, B,A,V 에 들어갈 수 있는 숫자의 범위가 (0 - 10억) 까지로, 만약 V값에 10억이 들어가게 되면 반복문을 거치는 시간이 극도록 증가한다는 사실을 깨달았다.

 

그래서 반목문을 사용하는 대신, 수학적 연산으로 풀이해 보았다. 

 

마지막날에는 달팽이는 목적지에 도달하고 더이상 미끄러지지 않으므로, 마지막날에는 일단 무조건 A미터를 올라간다 라는 가정을 하고 시작했다. (V - A)를 마지막날 바로 전날까지 달팽이가 올라가야 할 거리로 지정하였다.

 

하루 당 달팽이가 올라가는 거리는 마지막날을 제외하고 (A-B) 미터로 고정이기 때문에 (V-A) / (A-B)의 몫이 마지막날을 제외하고 달팽이가 올라오는데 걸린 시간이 된다. 그러나 (V-A) / (A-B)가 항상 나누어 떨어진다고 말할 수 없기에 If 조건문을 만들어 만약 (V-A) / (A - B) 의 몫이 0 일경우, 구한 몫에 1일을 더한 값을 출력하게 하였고, 만약 나머지가 0보다 클경우, 구한 몫이 2일을 더한 값을 출력하게 하였다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.InputStreamReader
import java.io.BufferedReader
import java.util.*
 
fun main(args: Array<String>) {
    var usrBufferedReader = BufferedReader(InputStreamReader(System.`in`))
    var usrStringTokenizer = StringTokenizer(usrBufferedReader.readLine())
 
    val ascend = usrStringTokenizer.nextToken().toInt()
    val distancePerDay = ascend - usrStringTokenizer.nextToken().toInt()
    var distanceRemain = (usrStringTokenizer.nextToken().toInt() - ascend)
    var dayTakenExceptLastDays = distanceRemain / distancePerDay
 
    if (distanceRemain % distancePerDay == 0) {
        println(dayTakenExceptLastDays + 1)
    } else {
        println(dayTakenExceptLastDays + 2)
    }
}
cs

 

'백준코딩' 카테고리의 다른 글

백준코딩 [2292] 벌집 - Kotlin  (0) 2020.08.13
백준코딩 [1712] 손익분기점 (Kotlin)  (0) 2020.08.02
백준코딩 [5622] - 다이얼 (Kotlin)  (0) 2020.07.31
Comments