개발 일기

백준 2869번 문제 - 달팽이는 올라가고 싶다 본문

백준 문제풀이

백준 2869번 문제 - 달팽이는 올라가고 싶다

종현종현 2021. 10. 25. 15:57

 

백준 2869번 문제

 

 

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

 

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

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

www.acmicpc.net

 

달팽이가 V 높이의 나무 막대를 낮엔 A만큼 올라가고 밤엔 B만큼 미끄러지는데 V 높이에 도착하면 미끄러지지 않는다.

그러므로 낮에 V에 도달하면 밤에 미끄러지지 않기 때문에 초과해서 날짜를 계산하지 않도록 조심해야 한다.

 

날짜를 초과하여 계산하지 않으려면 B만큼 미끄러지는 것을 V에서 미리 빼두어 날짜가 1일 초과되지 않게 하면 된다.

달팽이가 하루에 올라가는 거리는 A - B이고 먼저 V - B 만큼 가는데 걸리는 시간을 구하면 된다.

day = (V - B) / (A - B) 만큼 날이 걸린다. 만약 (V - B) / (A - B)의 값이 딱 떨어지게 되면 그 날의 낮에 도착하게 되지만 

나머지가 있다면 다음날 올라가야되기 때문에 하루가 더 추가 된다.

 

이 과정을 처음에는 for문을 이용하여 풀어서 제출했다.

BufferedReader와 Scanner 둘 다 사용해 봤지만 시간 초과가 됐다. 큰 수를 입력받으면 반복문이 오래돌아가게 되고 시간이 초과되는 것 같다.

 

그래서 반복문 없이 간단히 계산이 되어 출력되게 해야했다.

 

 

 

 

 

코딩

반복문을 사용하지 않고 바로 계산하여 출력할 수 있게 코딩하였다.

이번 문제의 경우 0.15초의 시간제한이 있었는데 이런 조건을 앞으로도 문제를 풀 때 유의해야 될 것 같다.

 

 

 

 

 

결과

위와 같이 코딩해서 제출할 때 통과할 수 있었다. 반복문이 굳이 필요하지 않다면 쓰지 않는 것이 좋겠다.

 

 

 

 

 

느낀 점

이번 문제는 조금 생각해보면 푸는 것 자체는 그렇게 어렵지 않았지만 조건들을 유의해야됐다. 시간제한을 보면서 조금 더 간단한 코딩을 할 순 없는지에 대해 고민해볼 수 있어서 좋았고 불필요한 반복문은 사용하지 않도록 해야겠다는 것을 느꼈다.

 

Comments