본문 바로가기

Algorithm/BaekJoon

[2869] 달팽이는 올라가고 싶다

728x90

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

 

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

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

www.acmicpc.net

 

문제

 

풀이

 

코드

/*
 * 백준 - 단계별 문제풀이 : 기본수학1
 * 2869번
 *
 * 달팽이는 올라가고 싶다.
 * 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
 * 달팽이는 낮에 A미터 올라갈 수 있다.
 * 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
 * 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
 *
 */

#include <iostream>
#include <cmath>

using namespace std;


int main() {


    int A, B, V;
    cin >> A >> B >> V;

    int sol;
    sol = ceil((double) (V - A) / (double) (A - B));

    cout << sol + 1 << "\n";


}

 

 

삽질1)

사실 처음에는 while문으로 접근했다.

뇌가 while문에 지배당했던거지.. 유사한 걸리는 날 문제를 풀다보니... (아직도 그 전 문제들 while아니어도 풀 수 있는 지 궁금)

근데 시간 초과가 났다.

 

코드는 이거 답은 아마 맞음

int solution(int v, int a, int b) {

    int h = 0;
    int day = 1;

    while (true) {

        h += a;
        if (h >= v) break;

        h -= b;
        day++;

    }
    return day;

}

그래서 위의 방법으로 다시풀었다. 

 

쓸데없는 삽질2)

왜 아직도 이걸 몰랐는지 이해가 안간다 

/*
 * 백준 - 단계별 문제풀이 : 기본수학1
 * 2869번
 *
 * 달팽이는 올라가고 싶다.
 * 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
 * 달팽이는 낮에 A미터 올라갈 수 있다.
 * 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
 * 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
 *
 */

#include <iostream>
#include <cmath>

using namespace std;


int main() {


    int A, B, V;
    cin >> A >> B >> V;

    int sol;
    sol = ceil((V - A) / (A - B));

    cout << sol + 1 << "\n";


}

원래 이거였는데,

A = 5
B = 1 
V = 6

에서 자꾸 답이 1이 나오는 것이다.

그러면 ceil ( ( 6 - 5 ) / ( 5 - 1 )) = ceil ( 1/4 ) = 0 이라는건데 

0.25 반올림이 어떻게 0이냐!!! 

당연함... 1/4 는 int / int 라서 0.25가 아니라 0임... 

이를 해결하기 위해서 double을 붙여주면 내가 원하는대로 된다.

 

나의 멍청함에도 놀라지않고 침착하게 답변해준 동기 myunji에게 감사를...(내 블로그에 맨날나옴..)

 

728x90