티스토리 뷰

>문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

>핵심

반복문 이외의 방법을 생각하자

나머지를 활용하자

>풀이과정

처음에 문제를 보고, 문제 쉽네 하고 무작정 반복문으로 돌리다가

시간제한이라는 큰 문제에 빠져 고민하게 했던 문제.

 

[정상에 올라간 후에는 미끄러지지 않는다]

그러므로 마지막날에는 내려가는 길이를 계산할 필요가 없다.

또한, 최소 달팽이가 V-A 위치에 있어야 다음날 정상에 다다를 수 있다. 하루에 A를 올라가니까.

 

그래서 V-A 위치를 기준으로 잡고 하루에 달팽이가 이동하는 총 거리, A-B를 이용해 나머지 연산을 한다.

(V-A) % (A-B) 가 0인 경우, 하루가 끝났을 때 달팽이가 V-A점에 위치하고 있다는 의미이므로,

다음날 바로 정상에 다다를 수 있다.

반면, (V-A) % (A-B) 가 0이 아닌 경우(살짝 못미친 경우), 하루를 추가로 오르락 내리락 하고 나서야

정상에 다다를 수 있다.

 

다른 사람들 풀이를 보니 다들 쉽게 푸는 문제라고 하는데

난 이거 이해하는데 한참 걸렸다.

코딩은 역시 타고난 재능이 있어야 하는가보다. 현타가 온다. 쩝.

>코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int A, B, V, cnt = 0;
	
	scanf("%d %d %d", &A, &B, &V);

	if (A == V)
	{
		printf("1\n");
		return 0;
	}

	if ((V - A) % (A - B) == 0)
	{
		cnt = (V - A) / (A - B);
	}
	else
		cnt = (V - A) / (A - B) + 1;

	printf("%d\n", cnt + 1);

	return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함