JUNGOL 기초다지기 05 선택제어문
프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.
이번 포스팅은 기초 다지기 중 다섯 번째인 선택제어문 문제를 풀어보도록 하겠습니다.
기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.
528 : 선택제어문 - 자가진단1
#include <iostream>
using namespace std;
int main(void)
{
int var;
cin >> var;
cout << var << endl;
if (var < 0)
cout << "minus" << endl;
}
529 : 선택제어문 - 자가진단2
#include <iostream>
using namespace std;
int main(void)
{
int height, weight;
cin >> height >> weight;
int obesityVal = weight + 100 - height;
cout << obesityVal << endl;
bool isObesity = obesityVal > 0;
if (isObesity)
cout << "Obesity" << endl;
}
530 : 선택제어문 - 자가진단3
#include <iostream>
using namespace std;
int main(void)
{
int age;
cin >> age;
if (age >= 20)
cout << "adult" << endl;
else
cout << 20 - age << " years later" << endl;
}
531 : 선택제어문 - 자가진단4
이번에는 작은 함수를 만들어 코드가 깔끔해 보이도록 작성해 봤습니다.
이런식으로 작성하면 코드의 의도를 명확하게 파악할 수 있다는 장점이 있습니다.
#include <iostream>
using namespace std;
bool IsFlyweight(float weight);
bool IsLightweight(float weight);
bool IsMiddleweight(float weight);
bool IsCruiserweight(float weight);
int main(void)
{
float weight;
cin >> weight;
if (IsFlyweight(weight))
{
cout << "Flyweight" << endl;
}
else if (IsLightweight(weight))
{
cout << "Lightweight" << endl;
}
else if (IsMiddleweight(weight))
{
cout << "Middleweight" << endl;
}
else if (IsCruiserweight(weight))
{
cout << "Cruiserweight" << endl;
}
else
{
cout << "Heavyweight" << endl;
}
}
bool IsFlyweight(float weight)
{
return weight <= 50.85f;
}
bool IsLightweight(float weight)
{
return weight <= 61.23f;
}
bool IsMiddleweight(float weight)
{
return weight <= 72.57f;
}
bool IsCruiserweight(float weight)
{
return weight <= 88.45f;
}
532 : 선택제어문 - 자가진단5
#include <iostream>
using namespace std;
int main(void)
{
float var1, var2;
cin >> var1 >> var2;
if (var1 >= 4.0f && var2 >= 4.0f)
cout << 'A' << endl;
else if (var1 >= 3.0f && var2 >= 3.0f)
cout << 'B' << endl;
else
cout << 'C' << endl;
}
533 : 선택제어문 - 자가진단6
작은 함수로 작성할 때의 장점은 주석으로 추가적인 설명을 기입할 필요 없이 코드 자체적으로 설명이 된다는 점 외에도 반복되는 코드를 하나의 함수로 정리할 수 있다는 장점이 있습니다.
작은 함수를 사용한 코드와 그렇지 않은 코드를 모두 작성하니 비교해보면 작은 함수의 장점을 파악할 수 있을 것입니다.
작은 함수 미사용)
#include <iostream>
using namespace std;
int main(void)
{
char sex;
int age;
cin >> sex >> age;
// 남성
if (sex == 'M')
{
// 성인인지 판단
if (age >= 18)
cout << "MAN" << endl;
else
cout << "BOY" << endl;
}
// 여성
else
{
// 성인인지 판단
if (age >= 18)
cout << "WOMAN" << endl;
else
cout << "GIRL" << endl;
}
}
작은 함수 사용)
#include <iostream>
using namespace std;
bool IsMale(char sex);
bool IsAdult(int age);
int main(void)
{
char sex;
int age;
cin >> sex >> age;
if (IsMale(sex))
{
if (IsAdult(age))
cout << "MAN" << endl;
else
cout << "BOY" << endl;
}
else
{
if (IsAdult(age))
cout << "WOMAN" << endl;
else
cout << "GIRL" << endl;
}
}
bool IsMale(char sex)
{
return sex == 'M';
}
bool IsAdult(int age)
{
return age >= 18;
}
534 : 선택제어문 - 자가진단7
#include <iostream>
using namespace std;
int main(void)
{
char alpha;
cin >> alpha;
if (alpha == 'A')
cout << "Excellent" << endl;
else if (alpha == 'B')
cout << "Good" << endl;
else if (alpha == 'C')
cout << "Usually" << endl;
else if (alpha == 'D')
cout << "Effort" << endl;
else if (alpha == 'F')
cout << "Failure" << endl;
else
cout << "error" << endl;
}
535 : 선택제어문 - 자가진단8
정수형으로 변환하면 소수점 이하 값을 버리는 것에 주목하시기 바랍니다.
#include <iostream>
using namespace std;
int main(void)
{
float score;
cin >> score;
switch (static_cast<int>(score))
{
case 4:
cout << "scholarship" << endl;
break;
case 3:
cout << "next semester" << endl;
break;
case 2:
cout << "seasonal semester" << endl;
break;
default:
cout << "retake" << endl;
break;
}
}
632 : 선택제어문 - 자가진단9
값의 비교를 삼항 연산자를 이어 한 줄로 처리할 수도 있습니다.
다만, 그렇게 하면 가독성이 굉장히 떨어지게 되므로 간결하게 작성하는 게 좋습니다.
#include <iostream>
using namespace std;
int GetMinValue(int var1, int var2, int var3);
int main(void)
{
int var1, var2, var3;
cin >> var1 >> var2 >> var3;
cout << GetMinValue(var1, var2, var3) << endl;
}
int GetMinValue(int var1, int var2, int var3)
{
int var1vs2 = var1 < var2 ? var1 : var2;
int var2vs3 = var2 < var3 ? var2 : var3;
return var1vs2 < var2vs3 ? var1vs2 : var2vs3;
}
120 : 선택제어문 - 형성평가1
#include <iostream>
using namespace std;
int main(void)
{
int var1, var2;
cin >> var1 >> var2;
int big = var1 > var2 ? var1 : var2;
int small = var1 < var2 ? var1 : var2;
cout << big - small << endl;
}
121 : 선택제어문 - 형성평가2
#include <iostream>
using namespace std;
int main(void)
{
int var;
cin >> var;
if (var > 0)
cout << "plus" << endl;
else if (var < 0)
cout << "minus" << endl;
else
cout << "zero" << endl;
}
122 : 선택제어문 - 형성평가3
윤년은 400으로 나누어 떨어지는 해 혹은 4로 나누어 떨어지고 100으로는 나누어 떨어지지 않는 해를 말합니다.
#include <iostream>
using namespace std;
bool IsLeapYear(int year);
int main(void)
{
int year;
cin >> year;
if (IsLeapYear(year))
cout << "leap year" << endl;
else
cout << "common year" << endl;
}
bool IsLeapYear(int year)
{
if (year % 400 == 0) return true;
if (year % 4 == 0 && year % 100 != 0) return true;
return false;
}
123 : 선택제어문 - 형성평가4
나열형을 사용하는 것도 가독성을 향상시키는데 도움이 됩니다.
#include <iostream>
using namespace std;
enum Species
{
dog = 1,
cat = 2,
chick = 3,
};
int main(void)
{
int num;
cout << "Number? ";
cin >> num;
switch (num)
{
case Species::dog:
cout << "dog" << endl;
break;
case Species::cat:
cout << "cat" << endl;
break;
case Species::chick:
cout << "chick" << endl;
break;
default:
cout << "I don't know." << endl;
break;
}
}
124 : 선택제어문 - 형성평가5
이 문제는 기본적으로 switch-case 문을 통해 쉽게 해결이 가능합니다.
그런데 배열 또는 맵을 사용하면 짧은 코드로 동일한 결과를 만들 수 있습니다.
switch-case 문 사용)
#include <iostream>
using namespace std;
int main(void)
{
int month;
cin >> month;
switch (month)
{
case 2:
cout << 28 << endl;
break;
case 4:
case 6:
case 9:
case 11:
cout << 30 << endl;
break;
default:
cout << 31 << endl;
}
}
배열 사용)
#include <iostream>
using namespace std;
int monthsDay[] = { 0,
31, 28, 31,30,
31, 30, 31, 31,
30, 31, 30, 31
};
int main(void)
{
int month;
cin >> month;
cout << monthsDay[month] << endl;
}
배열 또는 맵을 사용한 경우 메모리 사용량은 증가하지만 미리 계산된 값을 사용하기 때문에 실행 속도는 더 빠를 수 있습니다. 이것은 이러한 단순한 코드에서도 확인이 가능했습니다.
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=1050
JUNGOL | 문제은행 1 페이지
www.jungol.co.kr