본문 바로가기
C and C++/C and C++ Examples

[C Examples] 고양이 중에 누가 가장 밥을 많이 먹나: for loop, 2 dimensional array, if statement

by Henry Cho 2023. 9. 18.
728x90

고양이 중에 누가 가장 밥을 많이 먹나: for loop, 2 dimensional array, if statement

포스트 난이도: HOO_Junior


# Example codes

글쓴이는 동물 애호가이다. 오늘은 간단하면서도 재미있는 예제코드를 만들어보았다. 이번 예제코드에서는 고양이 3마리가 매일 얼마만큼의 밥을 먹으며, 최종적으로 누가 가장 많은 밥을 며칟날 먹었는지를 산출해 내는 걸 확인할 수 있다. 예제코드에서 유심히 살펴봐야 할 부분은 이차 배열을 활용하여 각각의 값들을 저장해주고 있으며, 이를 이중 for loop에서 어떻게 데이터 값들이 저장되고 if문에서 특정 값을 산출해 내기 위해 어떻게 계산이 되는 지이다. 거두절미하고 코드를 살펴보도록 하자.


#include <stdio.h>

int main()
{       
    // Array to hold the cat data
    int cats = 3;
    int days = 5;
    float food[cats][days];
    // You will need to use nested loops to deal with 2D-arrays
    int total = 0;
    int mostFood = 0;
    int monkeyNum = 0;
    int mostFoodDay = 0;
    
    for(int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            printf("Pounds eaten by cat # %d on day %d: ", i + 1, j + 1);
            scanf("%f", &food[i][j]);
            total = total + food[i][j];
            if(mostFood < food[i][j]) {
                mostFood = food[i][j];
                monkeyNum = i + 1;
                mostFoodDay = j + 1;
            }
        }
        printf("Total food consumed by cat # %d is %d pounds.\n", i + 1, total);
        total = 0;
    }
    printf("\n Cat # %d ate the most food: %d pounds, on day %d", monkeyNum, mostFood, mostFoodDay);

    return 0;
}

Figure 1. 예제코드에 대한 결과이다.


여기서 한가지 유의할 점을 이야기하자면, C언어에서 배열은 0부터 시작이 되게끔 설정해야 오류 없이 원하는 결과를 산출해 낼 수 있다. 예를 들어서 i나 j값이 +1을 하지 않고 초기값을 1로 설정할 경우 배열이 0부터 시작하지 않아 제대로 된 결과가 산출되지 않는 에러가 발생할 수 있다는 것이다. 아래의 또 다른 예제코드는 i와 j값을 1부터 시작했을 때 에러가 발생하는 걸 보여주고 있다. 코드 자체에는 문제가 없다 보니 컴파일 과정에서는 아무 문제 없이 결과가 산출된다. 마치 컴퓨터가 똥맛 카레를 만들어놓고는 마치 제대로 산출한 것처럼 "짜잔"을 외치는 상황과 동일하다. 지금이야 간단한 코드이고 한눈에 문제를 파악하기 용이하지만 코드가 복잡해진 상황에서 에러코드가 없이 잘못된 결과가 산출되면 개발자 입장에서는 돌아버리는 셈이다.


#include <stdio.h>

int main()
{		
	// Array to hold the cat data
	int cats = 3;
	int days=5;
    float food[cats][days]; // In your case this would be: float food[3][5]
    // You will need to use nested loops to deal with 2D-arrays
    int total = 0;
    int mostFood=0;
    int monekyNum=0;
    int mostFoodDay=0;
    
    for(int i=1; i<4;i++)
    {
        for (int j=1;j<6;j++)
        {
            printf("Pounds eaten by cat # %d on day %d: ", i, j);
            scanf("%f", &food[i][j]);
            total = total + food[i][j];
            if(mostFood<food[i][j])
            {
                mostFood=food[i][j];
                monekyNum=i;
                mostFoodDay=j;
            }
        }
        printf("Total food consumed by cat # %d is %d pounds.\n", i, total);
        total=0;
    }
    printf("\n Cat # %d ate the most food: %d pounds, on day %d", monekyNum, mostFood, mostFoodDay);


	return 0;
}

Figure 2. 배열을 0부터 시작하지 않을 경우 에러가 발생할 수 있다.


이처럼 제대로된 값을 설정해주지 않을 경우에는 컴파일 과정에서는 문제가 없어 보여도 결과적으로 코드 자체에 문제가 있어 잘못된 결괏값이 산출되거나 원하는 값 자체가 출력이 안될 수도 있다. 따라서 항상 배열 값들은 0부터 시작하도록 유의하길 바란다.


# github link

 

[Temp]


 

728x90

댓글