달팽이는 올라가고 싶다
https://www.acmicpc.net/problem/2869
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
0.15 초 (추가 시간 없음) | 128 MB | 189743 | 54304 | 45918 | 29.543% |
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다.
하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1
2 1 5
예제 출력 1
4
예제 입력 2
5 1 6
예제 출력 2
2
예제 입력 3
100 99 1000000000
예제 출력 3
999999901
출처
Contest > Croatian Open Competition in Informatics > COCI 2010/2011 > Contest #2 1번
- 문제를 번역한 사람: baekjoon
- 데이터를 추가한 사람: CHULMING, jm0707, tong39
- 문제의 오타를 찾은 사람: hellogaon
- 빠진 조건을 찾은 사람: jh05013
알고리즘 분류
문제를 정리하면
높이가 V인 나무를 달팽이가 올라간다.
낮에 A만큼 올라간다. (+)
밤에는 B만큼 미끄러진다. (-) <정상이라면 X>
달팽이의 높이가 V가 되는 날은 언제인가?
(1 ≤ B < A ≤ V ≤ 1,000,000,000)
A – B (올라간 길이 – 내려간 길이)는 하루에 올라갈 수 있는 길이가 된다.
즉. V / (A – B) = C 는 올라가는데 필요한 일 수가 되고
나머지 연산으로 V mod(A – B)의 값이 0보다 크다면 하루를 더 해주면 된다.
예제의 5 1 6
5 / (5 – 1) = 1 (하루가 필요)
5 % (5 – 1) = 1 > 0 (나머지가 있다면 올라가는 데 하루가 더 필요하다는 뜻)
통과된 코드
#include <iostream> using namespace std; // A 올라가는 거리, B 미끄러지는 거리, V 목표 높이 int A, B, V, result = 1; int main() { cin >> A >> B >> V; V -= A; if (V % (A - B) == 0) { result += V / (A - B); } else { result += V / (A - B); result++; } cout << result; return 0; }
결과의 기본 값을 0으로 설정해서 틀렸다.