Baekjoon Online Judge
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 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)
[출력]
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
[풀이]
해당 문제는 시간 제한이 0.25초로, while문을 사용하면 시간 초과가 된다.
따라서 while문 없이 코드를 구현하는 것이 핵심이다.
달팽이는 낮에 A미터 올라가고 밤에 B미터 미끄러지므로
결과적으로 하루에 A - B만큼 올라간다고 볼 수 있다.
그러나 정상에 올라간 후에는 미끄러지지 않으므로
마지막 날에는 달팽이가 A - B가 아니라 A만큼 올라간다.
즉, 마지막 날을 제외하고 하루에 A - B만큼 올라가는 것이기에
이를 고려하여 높이를 V - B로 계산한다.
따라서 결과를 구하는 식은 (V - B) / (A - B)가 된다.
만약 (V - B) % (A - B)의 결과가 0이라면
(V - B) / (A - B)의 결과를 그대로 출력하면 되고,
0이 아니라면 달팽이가 하루를 더 올라가야 하므로
((V - B) / (A - B)) + 1을 출력하면 된다.
[코드]
#include <iostream>
using namespace std;
int main()
{
int A, B, V;
cin >> A >> B >> V;
if ((V - B) % (A - B) == 0)
cout << (V - B) / (A - B) << endl;
else
cout << ((V - B) / (A - B)) + 1 << endl;
return 0;
}
'Baekjoon > C++' 카테고리의 다른 글
[C++][BOJ/백준] 1427 소트인사이드 (0) | 2024.01.06 |
---|---|
[C++][BOJ/백준] 2751 수 정렬하기 2 (0) | 2024.01.05 |
[C++][BOJ/백준] 16435 스네이크버드 (0) | 2023.11.05 |
[C++][BOJ/백준] 5585 거스름돈 (0) | 2023.11.03 |
[C++][BOJ/백준] 10214 Baseball (0) | 2023.11.02 |