본문 바로가기
알고리즘 문제 풀이/코뮤니티 추석맞이 코딩 챌린지

[추석맞이 코딩챌린지②] 정상 정복 c

by 옹구스투스 2021. 9. 20.
반응형

문제 출처 : https://cafe.naver.com/codeuniv?iframe_url=/ArticleList.nhn%3Fsearch.clubid=30026525%26search.menuid=193%26search.boardtype=L

 

코딩 커뮤니티 - 코뮤니티 [파이썬/... : 네이버 카페

코뮤니티 [코딩공부/독학/스터디/대외활동] : python, C언어, java, 자바스크립트, HTML, CSS, 웹/앱개발

cafe.naver.com

문제

달팽이는 높이가 N인 나무를 올라가고자 한다.

달팽이는 낮에는 A미터를 올라갈 수 있지만, 밤에 휴식을 취하면서 B미터 미끄러져 내려온다.

달팽이가 나무 정상에 도달하기 위해선 며칠이 걸릴까요?

조건 1 : 첫번째 줄에 A, B, N이 공백으로 구분되어 주어집니다.

조건 2 : 정상에 도달하는게 불가능할 경우, -1을 출력하세요. 수열은 수학에서 아래의 점화식으로 정의되는 수열입니다.

입/출력 예시

👉 입력 예시

2 1 5

👉 출력 예시

4

👉 입력 예시

100 101 1000000000

👉 출력 예시

-1

풀이

첫 번째 입력을 예로 들면,

첫째 날 : 낮의 높이는 2이고, 밤의 높이는 1이다.

둘째 날 : 낮의 높이는 3이고, 밤의 높이는 2이다.

셋째 날 : 낮의 높이는 4이고, 밤의 높이는 3이다.

넷째 날 : 낮의 높이는 5이기 때문에 밤까지 갈 것 없이 n에 도달했으니 종료한다.

즉, 항상 i번째 낮에 n높이에 도달하게 되며, 다음과 같은 예외 처리만 하면 된다.

1. n이 0인 경우 : 0번째 날에 도달한다.

2. n이 a보다 낮거나 같은 경우 : 1번째 날에 도달한다.

3. a가 b보다 낮은 경우 : n에 도달할 수 없다.

위의 예외들은 각각 상위에 있는 예외 사항에 해당하지 않아야 한다.

 

코드

#include <stdio.h>
#include <stdlib.h>

int main() {
	
	int a,b,n;
	scanf("%d %d %d",&a, &b, &n);
	//높이가 0인 경우
	if (n == 0) {
		printf("0");
	}
   	//하루만에 올라가는 경우
	else if (a >= n) {
		printf("1");
	}
	//올라갈 수 없는 경우
	else if (a <= b) {
		printf("-1");
	}
	else {
		int day = 1;
		int high = a-b;
		while (true) {
			if(high+a < n){
				high += a - b;
				day++;
			}
			else {
				printf("%d", day+1);
				break;
			}
		}
	}
	return 0;
}
반응형

댓글