본문 바로가기

백준

백준2869 - 달팽이는 올라가고 싶다.

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

 

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

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

www.acmicpc.net

코드는 간단하지만 생각하는데 오래걸렸다. 달팽이는 하루동안 A를 가고 B를 내려온다. V를 올라가야 하는데 총 며칠이 걸리는지 물어보는 문제다. 나는 V에서 A를 뺀 다음 남은 거리를 A - B로 얼마나 걸리는지 계산을 하였다. 남은거리를  A - B로 이동한 만큼 마지막 A이동에서 A - B로 초과하여 이동한 거리를 안가는 형식으로 풀었다.

 

ex1.) 

100 90 101
101 - 100 = 1
1은 100 - 90 한번이면 간다.
10 100

A는 100, B는 90, V는 101

 

 

ex2.)
2 1 5
(5 - 2) / (2 - 1) = 3
5 - 2 = 3
3은 2 - 1 세번이면 간다.
1 2 3 5

A는 2, B는 1, V는 5

 

 

ex3.)
7 3 10
10 - 7 = 3
3은 7 - 3 한번이면 간다.
4 10

A는 7, B는 3, V는 10

 

 

ex4.)
10 2 30
30 - 10 = 20
20은 10 - 2 세 번이면 간다
8 16 24 30

A는 10, B는 2, V는 30

 

 

ex5.)
4 2 10
10 - 4 = 6
6은 4 - 2 세번이면 간다 6 / 2 = 3
2 4 6 10

A는 4, B는 2, V는 10

 

 

ex6.)
7 2 30
30 - 7 = 23
23은 7 - 2 다섯번이면 간다 23 / 5 = 4
5 10 15 20 25 30

A는 7, B는 2, V는 30

 

 

#include <iostream>
using namespace std;

int main() {
	int A, B, V; //A는 올라가는 높이, B는 내려오는 높이, V는 도달해야 되는 높이
	int x; //몇일 걸리는지 나타내는 변수
    
	cin >> A >> B >> V;
    
	if ((V - A) % (A - B) == 0) { //V에서 마지막 A가는 거리를 뺀 것이 하룻동안 이동한 거리로 딱 맞게 떨어진다면
		x = (V - A) / (A - B); //V - A를 A - B로 나누어 이동한 총 일수를 계산
	}
	else { //V에서 마지막 A가는 거리를 뺀 것이 하룻동안 이동한 거리로 딱 맞게 떨어진다면
		x = (V - A) / (A - B) + 1; //하루를 더 추가, 나머지가 남으니까 하루를 더 가야 한다.
	}
	x++; //마지막 A이동 횟수를 증가
    
	cout << x;
}

'백준' 카테고리의 다른 글

백준6118 - 숨바꼭질  (0) 2019.07.18
백준5639 - 이진 검색 트리  (0) 2019.07.18
백준1371 - 가장 많은 글자  (0) 2019.07.15
백준1431 - 시리얼 번호  (0) 2019.07.15
백준1296 - 데이트  (0) 2019.07.13