본문 바로가기
개인 공부/코딩테스트

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

by seowit 2020. 3. 6.

문제

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

 

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

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

소스코드

#include <iostream>
using namespace std;

int main(void) {
	int A, B, V;
	cin >> A >> B >> V;

	cout << (V - B -1 ) / (A - B) + 1 << endl;
}

코드설명

하루에 달팽이가 올라갈 수 있는 거리는 A-B 만큼이다. 마지막 날에는 달팽이가 떨어지기 전에 목표지점에 도달할테니 달팽이가 V-B 까지 간 거리를 구해주면 된다. 그 다음 V-B 만큼의 거리에 A-B가 몇 번이나 반복되는지 알면 된다. +1은 마지막 하루를 더 해 준 것이다. 그러나 +1을 해주기 전에 이미 목표지점에 도달한 경우가 있다. (V-B)/(A-B)가 딱 나누어 떨어지는 경우가 그렇다. 문제의 예도 그렇고 또 다른 예를 들자면 V = 5, A = 5, B = 2 인 경우도 마찬가지다. 답은 하루만에 도착하는 것인데, 3/3 + 1 = 2일이 된다. 이런 경우까지 고려해서 V-B를 할 때 1을 추가로 빼주는 것이다. 

댓글