달팽이가 몇 회만에 탈출하는지 코딩해 보세요.
[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회만에 우물을 탙출하였습니다.
#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씩 아래로 미끄러진다. 이다.
meter가 50 이전이면 5증가 1감소를 meter변수에 적용시킨다.50m에 다다르거나 넘는다면 5증가 2감소를 meter변수에 적용시킨다.위의 연산식을 반복해 meter가 100을 넘으면 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);
}
조건식 부분을 좀 더 간결하게 표현해보았다.
meter가 5씩 증가하는 것은 같으므로 meter += 5;를 선언해준다.
중요한 것은 미끄러지는 거리이다.
달팽이가 이동한 거리가 50m가 안 되면 1m씩 미끄러지고 50m에 다다르거나 넘으면 2m씩 미끄러지게 된다.
따라서 다음과 같이 간결하게 표현할 수 있다.
meter += 5;
meter -= (meter < 50) ? 1 : 2;