개발/코딩테스트

코드업(codeup.co.kr) 1210 : 칼로리 계산하기 해설 (C언어)

ensuta 2022. 5. 2. 07:03
728x90
반응형

문제 설명 

시현이는 엄마와 함께 버엌퀸에 갔다.

시현이는 먹고 싶은게 많았으나, 부모님이 살찐다고 2가지만 골라서 먹으라고 했다.

그래서 두 메뉴의 칼로리 합이 500보다 크면 부모님이 화를 내고, 500 이하면 화를 내지 않으신다.

시현이가 선택할 수 있는 메뉴는 다음과 같다.

1. 치즈버거 : 400 cal

2. 야채버거 : 340 cal

3. 우유 : 170 cal

4. 계란말이 : 100 cal

5. 샐러드 : 70 cal

이 메뉴들 중 2가지 메뉴를 선택했을 때 cal 합을 계산하고, 그 칼로리 합이 500보다 크면 "angry", 500이하면 "no angry"를 출력하시오.

 

입력

 

메뉴의 번호가 차례대로 2개 주어진다. (정수)

출력

 

그 메뉴 번호의 메뉴 칼로리를 계산하여 500보다 크다면 "angry", 500이하라면 "no angry"를 출력하시오.

입력 예시 

1 2

출력 예시 

angry
도움말

치즈버거(400cal) + 야채버거(340cal) 의 합은 740cal이므로 부모님이 화를 낸다.

1) switch / case 구문으로 푸는법

switch / case 구문을 이용해서

a 와 b 가 될 수 있는 경우를 모두 비교한다.

그리고 2개의 값을 총합(sum)에 더한다.

0 (초기값) + a 의 칼로리 + b 의 칼로리 = sum(총합)

 

sum = 0 으로 초기화했다.

#include <stdio.h>
 
int main()
{
    int a, b;		
    int sum = 0;	// 총 칼로리. 0으로 초기화
    scanf("%d %d", &a, &b);
    
    switch(a){		//a가 가지는 경우
        case 1:
            sum += 400;
            break;
        case 2:
            sum += 340;
            break;
        case 3:
            sum += 170;
            break;
        case 4:
            sum += 100;
            break;
        case 5:
            sum += 70;
            break;
    }
   
    switch(b){	//b가 가지는 경우
        case 1:
            sum += 400;
            break;
        case 2:
            sum += 340;
            break;
        case 3:
            sum += 170;
            break;
        case 4:
            sum += 100;
            break;
        case 5:
            sum += 70;
            break;
    }
    
    if (sum > 500)		//부모님의 화를 결정
        printf("angry");
    else
        printf("no angry");
 
    return 0;
}

2) if 조건문으로 푸는법

위의 switch/case 와 거의 동일하다.

a와 b가 가지는 경우를 모두 비교한다.

 

중괄호를 없애서 더 간결해졌다.

하지만 실제 레지스터 연산에서는 if else 가 case switch 보다 느리다. 참고하자.

(개인적으로 중괄호 없는거 안 좋아함)

#include<stdio.h>
int main(){
int a,b;
int cal=0;		//총 칼로리
scanf("%d %d",&a,&b);

if(a==1) cal += 400;	// a의 경우
else if(a==2) cal += 340;
else if(a==3) cal += 170;
else if(a==4) cal += 100;
else cal +=  70;

if(b==1) cal += 400;	//b의 경우
else if(b==2) cal += 340;
else if(b==3) cal += 170;
else if(b==4) cal += 100;
else cal +=  70;

if(cal>500) printf("angry"); //부모님의 화를 결정
else printf("no angry");

return 0;
}

3) 배열(포인터)을 이용해 푸는 법

핵심은 배열이 포인터라는 점이다.

#include<stdio.h>
int main(){
int a,b;
int c[6] = {0,400,340,170,100,70};	//각 메뉴의 칼로리를 배열
scanf("%d %d",&a,&b);
if((c[a]+c[b])>500){		//a,b 각각에 해당하는 칼로리를 더한다 
printf("angry");
}else{
printf("no angry");
}
return 0;
}

배열 크기가 6이고 1번째 칸인 [0]에 0을 넣는 꼼수를 이용하였다.

 

2가지 메뉴의 총 칼로리 합을 묻고 있으므로 c[a]+c[b]로 구현했다.

 

배열을 이용하여 코드가 더욱 간결해졌다.

 

 

반응형