baekjoon 2869

호진·2022년 1월 3일
0

baekjoon

목록 보기
4/37

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



Idea

제목은 귀여웠지만 문제는 전혀 귀엽지 않은 문제..?

시간 제한에서 (추가 시간 없음) 보고 뒤로가기 누를려다 참음ㅋㅋ
알고리즘 수행시간 줄이는 건 잘 못해서 항상 이런 문제는 피하다가 처음으로 도전해봤는데 어느정도 요령이 생긴 듯 하다.
우선 시간복잡도를 신경쓰지 말고 답만 맞는 코드를 하나 만들었다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int main(void) {	

	int a, b, v, i = 2;

	// a morning  b night  v height

	scanf("%d %d %d", &a, &b, &v);

	int num1 = a, num2 = b;

	while (1) {
		num1 += a;
		if ((num1 - num2) >= v) {
			printf("%d", i);
			break;
		}
		num2 += b;
		i++;
	}	

	return 0;
}

답으로 제출할 건 아니지만 이렇게 만들어 놓으면 이 문제처럼 연산 한 줄로 끝내야하는 문제에서 예제가 많아지기 때문에 여러가지 식을 세울 때 도움이 된다.
네 그냥 제 방식이고요

하루에 달팽이가 올라가는 거리는 A - B가 된다.
총 올라가야 하는 나무의 높이는 V이지만 달팽이는 나무를 다 올라가면 미끄러지지 않기 때문에 V - B가 된다.

즉, (V - B) / (A - B) 라는 연산식을 얻을 수 있다.

ㅇ?..

다시 보면 (V - B)(A - B) 로 나누는데 나누어 떨어지지 않는 경우가 생긴다. 나누어 떨어지는지 아닌지 판별하는 조건문을 만들고 연산을 다시 할까 했지만 역시 더 쉬운 방법이 있었다.

그냥 (V - B) 에 1 만큼 빼주고 전체에 1 만큼 더해주면 된다.

(V - B - 1) / (A - B) + 1


Code

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int a, b, v;

	scanf("%d %d %d", &a, &b, &v);

	printf("%d", (v - b - 1) / (a - b) + 1);

	return 0;
}

ㅎㅎ

profile
💭(。•̀ᴗ-)✧

0개의 댓글