🔒 문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
⌨ 입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
🖨 출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
📚 예제
Ex1)
2 1 5
4
Ex2)
5 1 6
2
Ex3)
100 99 1000000000
999999901
📌 풀이
달팽이가 이동하는 거리는 낮에는 A만큼 늘어나고, 밤에는 B만큼 줄어든다.
|걸린 날짜|이동 거리|
|---------|---------|
|1|A|
|2|A+(A-B) * 1|
|3|A+(A-B) * 2 |
|···|···|
|n|A+(A-B) * (n-1)|
V = A+(A-B) * (n-1)
V-A = (A-B) * (n-1)
n-1 = (V-A)/(A-B)
n = (V-A)/(A-B)+1
이라는 식이 만들어 진다.
그런데 n은 int형이라 나머지가 생겨도 버리기 때문에 (V-A)%(A-B)가 0이 아닐 경우 +1을 더 해 준다.
아니면 올림 함수 ceil을 사용하여
n = ceil((double)(V - A) / (A - B)) + 1 을 사용한다
🔑 c언어 코드
#include<stdio.h>
#include<math.h>
int main()
{
int A, B, V;
scanf("%d %d %d", &A, &B, &V);
int d;
if ((V - A) % (A - B) > 0)
d = (V - A) / (A - B) + 2;
else
d = (V - A) / (A - B) + 1;
printf("%d", d);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int A, B, V;
scanf("%d %d %d", &A, &B, &V);
int d = ceil((double)(V - A) / (A - B)) + 1;
printf("%d", d);
return 0;
}
'BAEKJOON > 단계별로 풀어보기' 카테고리의 다른 글
[BOJ] 2775번 : 부녀회장이 될테야 (0) | 2022.08.10 |
---|---|
[BOJ] 10250번 : ACM 호텔 (0) | 2022.08.09 |
[BOJ] 1193번 : 분수찾기 (0) | 2022.08.07 |
[BOJ] 2292번 : 벌집 (0) | 2022.08.07 |
[BOJ] 1712번 : 손익분기점 (0) | 2022.08.06 |