반응형
https://www.acmicpc.net/problem/2869
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1 복사
2 1 5
예제 출력 1 복사
4
사고의 흐름
1. 아무 조건 없이 위의 문제를 풀면 어렵지 않지만 시간이 0.15초라는 점이 이 문제의 특징이다. 처음에는 while문을 이용하여 문제를 풀었지만 시간초과가 발생하여 문제를 풀 수 없었다. 다른 방법을 사용해야 한다.
2. 몇 일이 걸리는지를 수학적으로 구현을 해야 한다고 한다. 매일 A-B만큼 올라가기 때문에 V-A만큼 올라가는데 걸리는 기간은 (V-A)/(A-B)이다. 이때 (V-A)/(A-B)가 0으로 딱 나누어 떨어지면 상관이 없지만 나머지가 존재하면 나머지만큼 그 다음날 올라가야 한다. 따라서 이런 경우에는 1을 더한다. 이 부분을 else문을 통해 표현한다.
소스코드 및 실행결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<iostream>
using namespace std;
int main() {
int a, b, v;
cin >> a >> b >> v;
int day;
if ((v - a) % (a - b) == 0) {
day = (v - a) / (a - b);
}
else
day = (v - a) / (a - b)+1;
cout << day+1 << endl;
}
|
cs |
오답 원인 분석
▶ while문만을 사용할 줄 알았다. 이 문제의 핵심인 걸리는 기간을 수학적으로 표현하는 것을 잡아내지 못해 틀렸다.
728x90
반응형
'💻 개인공부 💻 > 알고리즘' 카테고리의 다른 글
[백준 - 1011] fly me to the alpha centauri (0) | 2020.09.05 |
---|---|
[백준 - 2775] 부녀회장이 될테야 (0) | 2020.09.04 |
[백준 -10809번] 알파벳 찾기 (feat. strlen( ), 아스키 코드) (0) | 2020.08.02 |
[백준 - 8958] OX퀴즈 (0) | 2020.08.01 |
[백준 - 2562] 최댓값 (0) | 2020.07.31 |