[백준] 2869번 달팽이는 올라가고 싶다 C++ 문제 풀이 수학 1
2020. 1. 21. 12:09ㆍ알고리즘/백준
728x90
반응형
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1
2 1 5
예제 출력 1
4
문제 풀이
#include <iostream>
using namespace std;
int main() {
int A, B, V;
cin>>A>>B>>V;
if(A == V)
cout<<1;
else{
int answers = 0;
int C = V-A;
int D = A-B;
int E = C/D;
if((double)E != (double)C/(double)D)
answers = E+2;
else
answers = E+1;
cout<<(int)answers;
}
}
달팽이의 동작은 올라가거나 내려오거나 두 가지이고,
올라가고 내려오고 사이클을 반복하다 올라가는 시점에서 목적지에 도달하게 됩니다.
for 문으로 풀면 시간 초과가 뜹니다.
C는 마지막 올라가기 전 사이클이 끝나는 최소 높이입니다.
D는 사이클 후 올라간 높이입니다.
E는 사이클 반복 횟수입니다.
E와 C/D가 같으면 딱 나누어떨어진 경우이므로 한 번만 더 올라가면 내려감 없이 V에 도달하게 됩니다.
같지 않은 경우는 사이클을 한 번 더 수행 후 올라가야 V에 도달하게 됩니다.
따라서 1과 2를 각각 더하였습니다.
출처 : https://www.acmicpc.net/problem/2869
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2775번 부녀회장이 될테야 C++ 문제 풀이 수학 1 (6) | 2020.01.29 |
---|---|
[백준] 10250번 ACM 호텔 C++ 문제 풀이 수학 1 (2) | 2020.01.28 |
[백준] 1193번 분수찾기 C++ 문제 풀이 수학 1 (0) | 2020.01.17 |
[백준] 2292번 벌집 C / C++ 문제 풀이 수학 1 (0) | 2020.01.17 |
[백준] 2839번 설탕 배달 C++ 문제 풀이 수학 1 (0) | 2020.01.16 |