보관함

JUNGOL 기초다지기 05 선택제어문

niamdank 2019. 11. 18. 21:12

프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.

이번 포스팅은 기초 다지기 중 다섯 번째인 선택제어문 문제를 풀어보도록 하겠습니다.

 

기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.


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