celina의 이것저것

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

자료구조&알고리즘/백준

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

celinayk 2023. 2. 10. 19:26
반응형

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

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

출력

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

접근

우선 내가 작성했던 코드이다(시간초과됨)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main() {
    
    int a, b, v, y;
    int x = 0;
    int cnt = 0;
    scanf("%d %d %d", &a, &b, &v);

    while (true) {
        y = x + a;
        x = y - b;
        if (y < v) 
            cnt++;
        
        if (y > v) {
            cnt++;
            break;
        }
            
    }
    printf("%d", cnt);

    return 0;
}

정답에는 전혀 문제가 없다 다만 예제3처럼 숫자가 매우 커지는 경우에는 답이 출력되는 시간이 조금 걸리긴 한다. 어쨌든 문제에서 주어진 시간제한에 초과되기 때문에 틀렸다... ㅎ

시간제한이 없었다면 수학적으로? 계산만하면 되는데 시간제한때문에 다시 처음부터 생각해야한다...ㅎ

무한루프를 썼는데 이걸 안쓰고 구해야한다. 하...ㅎ

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main() {
    
    int a, b, v;
    int cnt = 0;
    scanf("%d %d %d", &a, &b, &v);

    cnt = (v - b - 1) / (a - b) + 1;
    printf("%d", cnt);

    return 0;
}

 

리뷰

글 읽기 - 2869문제 이해가안됩니다..ㅠㅠ (acmicpc.net)

 

글 읽기 - 2869문제 이해가안됩니다..ㅠㅠ

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

솔직히 저 계산식이 도저히 이해가 안가서 참고했다..

읽어보니까 알것같기도...

그런데도 잘 모르겟음 ㅋㅋㅋㅋㅋㅋㅋㅋ...

 

출처

2869번: 달팽이는 올라가고 싶다 (acmicpc.net)

 

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

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

www.acmicpc.net

 

Comments