코딩/백준 문제 (브론즈)

[백준/2869/C언어] 달팽이는 올라가고 싶다 _ 풀이

룻밤 2023. 8. 31. 18:58

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net


풀이

#include <stdio.h>
int main() {
	int a, b, v;

	scanf("%d %d %d", &a, &b, &v);
	// 홀수일때
	if ((v - b) % (a - b) != 0) 
		// +1 해서 출력
		printf("%d\n", (v - b) / (a - b) + 1);
	// 짝수일때
	else printf("%d\n", (v - b) / (a - b));
	
	return 0;
}

처음에는 시간제한 조건을 보지않고 while과 같은 반복문을 써서 풀었다.

당연히 틀렸고 시간제한 조건을 보니 0.25초.

시간복잡도가 O(1)이내에 풀어야하므로 반복문을 사용하면 초과해버린다.

그렇기에 수식을 만들어 푸는 방법을 택했다.

 

하루에 (a-b)미터씩 v까지 올라간다.

(a-b)+(a-b)+......+(a-b) = v

하지만 마지막날엔, 그러니까 a를 더했을때 v가 된다면 -b를 하지않고 그대로 간다.

(a-b)+(a-b)+......+(a-b) = v - b

이렇게 하게 된다면 조건은 성립된다.

(a-b)의 횟수가 일수가 됨으로 (v-b)/(a-b)를 하게 되면 일수가 나온다.

다만 v-b가 홀수일때는 하루를 더해줘야 하니까 홀수, 짝수 조건으로 나눠 푼다.