[C] 달팽이 우물 탈출하기

Haeun Noh·2022년 8월 22일
1

C언어_예제

목록 보기
1/19

0822


문제

달팽이가 몇 회만에 탈출하는지 코딩해 보세요.

[1] 달팽이가 이동한 거리 : 4
[2] 달팽이가 이동한 거리 : 8
[3] 달팽이가 이동한 거리 : 12
[4] 달팽이가 이동한 거리 : 16
[5] 달팽이가 이동한 거리 : 20
[6] 달팽이가 이동한 거리 : 24
[7] 달팽이가 이동한 거리 : 28
[8] 달팽이가 이동한 거리 : 32
[9] 달팽이가 이동한 거리 : 36
[10] 달팽이가 이동한 거리 : 40
[11] 달팽이가 이동한 거리 : 44
[12] 달팽이가 이동한 거리 : 48
[13] 달팽이가 이동한 거리 : 52
[14] 달팽이가 이동한 거리 : 55
[15] 달팽이가 이동한 거리 : 58
[16] 달팽이가 이동한 거리 : 61
[17] 달팽이가 이동한 거리 : 64
[18] 달팽이가 이동한 거리 : 67
[19] 달팽이가 이동한 거리 : 70
[20] 달팽이가 이동한 거리 : 73
[21] 달팽이가 이동한 거리 : 76
[22] 달팽이가 이동한 거리 : 79
[23] 달팽이가 이동한 거리 : 82
[24] 달팽이가 이동한 거리 : 85
[25] 달팽이가 이동한 거리 : 88
[26] 달팽이가 이동한 거리 : 91
[27] 달팽이가 이동한 거리 : 94
[28] 달팽이가 이동한 거리 : 97
[29] 달팽이가 이동한 거리 : 100
[30] 달팽이가 이동한 거리 : 103
30회만에 우물을 탙출하였습니다.

문제 조건

  • 우물의 높이는 100m로 설정한다.
  • 달팽이가 한 번에 이동하는 거리는 5m이다.
  • 달팽이는 50m 전까지는 5m를 이동한 후 1m를 밑으로 미끄러지며, 50m 이후 2m씩 아래로 미끄러진다.
  • while문을 사용한다.

소스코드

#include <stdio.h>

int main(void) {
	int height = 100, meter = 0, num = 0;		// 우물의 높이, 달팽이가 한 번에 이동하는 거리

	while (meter <= height) {
		num++;

		if (meter < 50) {
			meter += 5;
			meter--;
		}
		else {
			meter += 5;
			meter -= 2;
		}

		printf("[%d] 달팽이가 이동한 거리 : %d\n", num, meter);
	}

	printf("%d회만에 우물을 탙출하였습니다.", num);
}

소스코드 풀이

  • height는 우물의 높이를 뜻한다.
    meter는 달팽이가 한 번에 이동하는 거리를 뜻한다.
    num은 횟수를 뜻한다.

  • while문meter가 우물의 높이인 height를 초과하면 종료된다.
    횟수를 뜻하는 num을 반복할 때마다 1씩 증가시킨다.

  • if문에서 쓰인 조건은 달팽이는 50m 전까지는 5m를 이동한 후 1m를 밑으로 미끄러지며, 50m 이후 2m씩 아래로 미끄러진다. 이다.

    1. 해당 조건을 토대로 meter50 이전이면 5증가 1감소meter변수에 적용시킨다.
    2. 달팽이가 전진한 거리가 50m에 다다르거나 넘는다면 5증가 2감소meter변수에 적용시킨다.
  • 위의 연산식을 반복해 meter100을 넘으면 while문을 빠져나오게 된다.
    여기서 주의할 점은 딱 100m라고 해도 우물을 넘은 것이 아니기 때문에 꼭 조건식을 (meter <= height)=연산자를 넣어주어야 한다.

  • while문을 빠져나온 후 달팽이가 이동한 거리와 몇 회만에 우물을 탈출하였는지에 대한 값을 출력한다.


실행결과

[1] 달팽이가 이동한 거리 : 4
[2] 달팽이가 이동한 거리 : 8
[3] 달팽이가 이동한 거리 : 12
[4] 달팽이가 이동한 거리 : 16
[5] 달팽이가 이동한 거리 : 20
[6] 달팽이가 이동한 거리 : 24
[7] 달팽이가 이동한 거리 : 28
[8] 달팽이가 이동한 거리 : 32
[9] 달팽이가 이동한 거리 : 36
[10] 달팽이가 이동한 거리 : 40
[11] 달팽이가 이동한 거리 : 44
[12] 달팽이가 이동한 거리 : 48
[13] 달팽이가 이동한 거리 : 52
[14] 달팽이가 이동한 거리 : 55
[15] 달팽이가 이동한 거리 : 58
[16] 달팽이가 이동한 거리 : 61
[17] 달팽이가 이동한 거리 : 64
[18] 달팽이가 이동한 거리 : 67
[19] 달팽이가 이동한 거리 : 70
[20] 달팽이가 이동한 거리 : 73
[21] 달팽이가 이동한 거리 : 76
[22] 달팽이가 이동한 거리 : 79
[23] 달팽이가 이동한 거리 : 82
[24] 달팽이가 이동한 거리 : 85
[25] 달팽이가 이동한 거리 : 88
[26] 달팽이가 이동한 거리 : 91
[27] 달팽이가 이동한 거리 : 94
[28] 달팽이가 이동한 거리 : 97
[29] 달팽이가 이동한 거리 : 100
[30] 달팽이가 이동한 거리 : 103
30회만에 우물을 탙출하였습니다.


발전시켜보기

소스코드를 보니 삼항연산자를 사용하면 소스코드를 더 간략하게 줄일 수 있다는 판단이 들어 이번엔 삼항연산자를 사용하여 변경시켜 보았다.

int main(void) {
	int height = 100, meter = 0, num = 0;	

	while (meter <= height) {
		num++;

		meter += 5;
		meter -= (meter < 50) ? 1 : 2;

	
		printf("[%d] 달팽이가 이동한 거리 : %d\n", num, meter);
	}

	printf("%d회만에 우물을 탙출하였습니다.", num);
}

소스코드 풀이

조건식 부분을 좀 더 간결하게 표현해보았다.

meter5씩 증가하는 것은 같으므로 meter += 5;를 선언해준다.

중요한 것은 미끄러지는 거리이다.
달팽이가 이동한 거리가 50m가 안 되면 1m씩 미끄러지고 50m에 다다르거나 넘으면 2m씩 미끄러지게 된다.
따라서 다음과 같이 간결하게 표현할 수 있다.

meter += 5;
meter -= (meter < 50) ? 1 : 2;


달팽이 우물 탈출하기 예제 JAVA로 다시 풀어보기

profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글