: solved.ac class2 - silver5
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
예제 입력 1
2 1 5
예제 출력 1
4
예제 입력 2
5 1 6
예제 출력 2
2
예제 입력 3
100 99 1000000000
예제 출력 3
999999901
정답
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b, v;
int day = 1;
scanf("%d %d %d", &a, &b, &v);
v -= a;
if (v % (a - b) == 0) {
day += (v / (a - b));
}
else {
day += ((v / (a - b)) + 1);
}
printf("%d", day);
return 0;
}
해설
: 달팽이는 상승->하강->상승을 반복한다.
마지막 날에는 반드시 상승으로 끝나므로, 전체 높이에서 미리 상승 거리를 빼둔다.
남은 거리를 (상승거리-하강거리)로 나눈다.
1. 문제에서 제시한 상승거리 A, 하강거리 B, 전체 높이 V를 입력받는다.
전체 소요 일수를 셀 변수 day는 최솟값인 1로 초기화시켜 둔다.
전체 높이 V에서 상승거리 A를 미리 빼둔다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b, v;
int day = 1; //최소 소요 일수 1일
scanf("%d %d %d", &a, &b, &v);
v -= a;
//마지막 날은 무조건 내려가지 않고 끝나므로
//v에서 미리 a만큼을 빼두기
2. V를 하루에 이동하는 거리(A-B)로 나누어
나누어떨어질 경우 그 몫만큼을 소요 일수에 더해주고,
나누어떨어지지 않는다면 하루를 더 가야 하는 것이므로 몫에 1을 더한 값을 소요 일수에 더해준다.
계산이 끝나면 일수를 결과값으로 출력한다.
if (v % (a - b) == 0) {
//하루에 이동하는 거리로(a-b) 나누었을 때
//나누어떨어지는 경우 그 일수만큼 그대로 더해주기
day += (v / (a - b));
}
else {
day += ((v / (a - b)) + 1);
//나누어떨어지지 않는 경우 하루를 더 가야 하므로
//몫+1만큼 더해주기
}
printf("%d", day); //일수 출력
return 0;
}
'C언어 > BAEKJOON' 카테고리의 다른 글
[백준] 1929. 소수 구하기 (0) | 2022.06.25 |
---|---|
[백준] 1427. 소트인사이드 (0) | 2022.06.25 |
[백준] 2839. 설탕 배달 (0) | 2022.06.18 |
[백준] 1475. 방 번호 (0) | 2022.06.18 |
[백준] 11650. 좌표 정렬하기 (0) | 2022.05.28 |