목차
https://www.acmicpc.net/problem/2869
코드
#include <iostream>
using namespace std;
int main() {
int A, B, V;
int answer;
cin >> A >> B >> V;
//하루만에 올라갈 수 있을 때
if(V <= A) answer = 1;
else{
V -= A;
if(V % (A - B)) answer = V / (A - B) + 2;
else answer = V / (A - B) + 1;
}
cout << answer;
}
설명
세 가지 Case로 나누어서 생각하면 풀 수 있는 문제이다.
i ) V <= A
밤까지 가지 않아도 되는 경우, 하루 낮으로 올라갈 수 있는 경우이다.
i case의 경우가 아니라면?
우선, 정상에 도착하면 밤에 미끄러지지 않으므로 마지막 날 낮의 이동으로 정상에 무조건 간다.
그렇기 때문에 길이 V에서 낮의 이동거리 A를 먼저 빼준다.
ii) (V - A) % ( A - B) 가 0이 아닌경우.
나머지가 있다는 것은, 낮-밤의 이동일이 (V - A) / (A - B) + 1이 되어야 한다는 뜻이다.
ii) (V - A) % ( A - B) 가 0인 경우.
나머지가 없다는 것은 딱 맞아 떨어지므로
낮-밤 이동을 (V - A) / (A - B) 만큼 하고 다음날 아침에 A만큼 이동하면 정상에 딱 올라간다는 뜻이므로
낮-밤의 이동일이 (V-A) / (A-B) 라는 뜻이다.
이렇게 3 가지 경우가 있다는 것을 생각해서 풀이하면 되는 문제이다.
반복문을 사용하여 풀이하는 경우 시간 초과가 잘 가능성이 크므로, 이러한 방법으로 풀이하면 될 것 같다.
'공부 > 백준(C++) - 2022~' 카테고리의 다른 글
백준 2775번: 부녀회장이 될테야 [C++] (0) | 2022.01.13 |
---|---|
백준 10250번: ACM호텔[C++] (0) | 2022.01.13 |
백준 1193번: 분수찾기 [C++] (0) | 2022.01.12 |
백준 2292번: 벌집 [C++] (0) | 2022.01.12 |
백준 1712번: 손익분기점 [C++] (0) | 2022.01.12 |