have to do_yeon

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

C++/Baekjoon (C++)

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

또김또 2022. 8. 25. 02:53

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

 

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

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

www.acmicpc.net

 

 


 

처음에 단순하게 반복문을 사용하여 돌려봤더니 시간초과가 떴다.  그래서 수식을 사용하여 해결하는 방법을 생각했다.

 

생각해야할 중요한 부분이 있다.

달팽이가 정상에 도달할 때 딱 맞춰서 정상에 도착해서 낮에 끝나는지, 아니면 아쉽게 도달하지 못하여 밤을 한 번 지내고 그 다음날 낮에 도달하는지이다.

나는 이 부분을 달팽이가 다음날을 마지막 날로 하여 정상에 갈 수 있는지, 아니면  하루가 더 필요한지를 나머지를 이용하여 확인하였다.

 

자세한 설명은 주석으로 첨부해놓았다.

 


제출 답안

 

#include <iostream>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int A, B, V;
    
    cin>> A >> B >> V;
    
    if (A == V){   // 만약 올라가야되는 거리가 낮에 달팽이 갈 수 있는 거리와 같다면
    	cout<< 1;    // 하루만에 갈 수 있음
        return 0;
    }
    
    int day, length = A - B;    // 낮과 밤동안 갈 수 있는 거리
	// (V - A) 그 거리까지 오면 무조건 다음날 달팽이는 도착
	
    if ((V - A) % length){  // (V - A)의 거리까지 가는데 걸리는 시간을 구할때 정수가 안나오면 하루 더 추가
    	day = ((V - A) / length) + 1 + 1;
    }
    else{
    	day = (V - A) / length + 1;      // 정상에 도달하려면 하루가 더 걸림
    }
    cout<< day;
}

'C++ > Baekjoon (C++)' 카테고리의 다른 글

[백준 / C++] 10814. 나이순 정렬  (0) 2022.08.27
[백준 / C++] 7568. 덩치  (0) 2022.08.27
[백준 / C++] 1978. 소수 찾기  (0) 2022.08.20
[백준 / C++] 1436. 영화감독 숌  (0) 2022.08.20
[백준 / C++] 1181. 단어 정렬  (0) 2022.08.20
Comments