본문 바로가기

C++/백준

[C++][백준] 2869 달팽이는 올라가고 싶다

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

 

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

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

문제

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

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

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

입력

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

출력

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

예제 입력 1

2 1 5

예제 출력 1

4

 

풀이

시간제한이 0.15초이기 때문에 시간에 신경을 많이 써야할 필요가 있는 문제이다.

처음에는 while문을 이용했기 때문에 시간초과가 났다.

그래서 반복문을 사용하지 않는 방법을 고민해야했다.

달팽이가 V 길이의 막대를 낮에 A미터 올라가고 밤에는 B미터 미끄러진다는 것을 식으로 만들면 (V-A)/(A-B)가 된다.

그리고 정상에 도달했을 때에는 미끄러지지 않으니 day는 그대로 (V-A)/(A-B)가 되고

아니라면 (V-A)/(A-B)+1이 되어 하루를 더 지난다.

그리고 최종적으로 1일부터 계산되어야하기 때문에 +1을 하고 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    int A,B,V;
    scanf("%d %d %d",&A,&B,&V);
    int day;
    
    if((V-A)%(A-B)==0)
        day= (V-A)/(A-B);
    else
        day= (V-A)/(A-B)+1;
    
    printf("%d\n",day+1);
 
}
 

 

'C++ > 백준' 카테고리의 다른 글

[C++][백준] [정렬] 2959 거북이  (0) 2020.03.10
[C++][백준] [정렬] 2870 수학숙제  (0) 2020.03.10
[C++][백준] 2798 블랙잭  (0) 2020.03.10
[C++][백준] 2753 윤년  (0) 2020.03.10
[C++][백준] [정렬] 2751 수 정렬하기 2  (0) 2020.03.10