: 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

+ Recent posts