ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL 기초다지기 05 선택제어문
    보관함 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

    댓글

Designed by Tistory.