문제 설명
시현이는 엄마와 함께 버엌퀸에 갔다.
시현이는 먹고 싶은게 많았으나, 부모님이 살찐다고 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]로 구현했다.
배열을 이용하여 코드가 더욱 간결해졌다.
'개발 > 코딩테스트' 카테고리의 다른 글
코드업(codeup.co.kr) 1542 : 함수로 prime 또는 composite 출력하기 해설 (C언어) (0) | 2022.11.01 |
---|---|
코드업(codeup.co.kr) 1550 : 함수의 양의 제곱근의 정수 부분만 리턴하기 해설 (C언어) (0) | 2022.11.01 |
코드업(codeup.co.kr) 1180 : 만능 휴지통 해설 (C언어) (0) | 2022.05.01 |
코드업(codeup.co.kr) 1205 : 최댓값 해설 (C언어) (0) | 2022.05.01 |
코드업(codeup.co.kr) 1097 : 바둑알 십자 뒤집기 해설 (C언어) (0) | 2022.03.26 |