C++/C++ 강좌 문제 해답

[C++ 강좌 해답] 3-2. 조건문 정답 공개 및 해설

카루-R 2022. 2. 16. 15:19
반응형
 

[카루의 C++ 강좌] 3-2. 조건문과 if ~ else if ~ else

오늘은 조건문을 배워보겠습니다. 예전에 배웠던 삼항 조건 연산자 기억하시나요? 그 연산자가 블록이 되었다고 보시면 쉽습니다. (조건식) ? (참일 때 실행할 식) : (거짓일 때 실행할 식); 자세

karupro.tistory.com

3-2 강좌의 도전 과제 해답을 설명합니다.

1. 두 수를 입력받고, 더 큰 수를 출력하는 프로그램을 작성하세요.

// 모범 답안 (전체 코드)
#include <iostream>

int main()
{
    double num1, num2;
    std::cout << "두 수를 입력하세요: ";
    std::cin >> num1 >> num2;
    
    if (num1 > num2)
        std::cout << num1 << "이(가) 더 큽니다." << std::endl;
    else if (num1 < num2)
        std::cout << num2 << "이(가) 더 큽니다." << std::endl;
    else
        std::cout << "두 수는 같습니다." << std::endl;
}​

정수라고 한정하지 않았으니 자료형을 double로 선언했습니다. int로 하셔도 크게 상관은 없습니다.

2. 정수를 입력받고 그 값에 따라 다음과 같이 출력하는 프로그램을 작성하세요.

3의 배수 입력 -> "3의 배수" 출력
5의 배수 입력 -> "5의 배수" 출력
15의 배수 입력 -> "15의 배수" 출력
기타 다른 수 입력 -> "해당 없음" 출력
// 모범 답안 (전체 코드)
#include <iostream>

int main()
{
    int in{};
    std::cout << "정수를 입력하세요: ";
    
    if (std::cin >> in; in % 3 == 0 && in % 5 == 0)
        std::cout << "15의 배수";
    else if (in % 3 == 0)
        std::cout << "3의 배수";
    else if (in % 5 == 0)
        std::cout << "5의 배수";
    else
        std::cout << "해당 없음";    
}

15의 배수, 즉 3과 5의 공배수일 때가 가장 위에 있어야 합니다. 그렇지 않으면 의도치 않은 동작이 일어날 수 있습니다.

 

3. std::string에 문자열을 입력받고, "apple"을 입력한 경우 "정답"을 출력하세요.

 
// 모범 답안 (전체 코드)
#include <iostream>

int main()
{
    std::string str;
    if (std::cin >> str; str == "apple")
        std::cout << "정답";
}

별 거 없습니다. 비교할 대상이 문자열이라는 차이가 있을 뿐 입니다.

4. [고난이도] 세 개의 실수를 입력받아 그 중 가장 큰 수를 출력하세요.

 
<조건>
1. 범위기반 for문을 반드시 사용합니다. 배열을 쓰라는 뜻입니다.
2. if문의 사용 횟수에는 제한을 두지 않습니다.
3. 세 수가 모두 같은 경우에는 아무것도 출력하지 않습니다.
// 모범 답안 (전체 코드)
#include <iostream>

int main()
{
    double darr[3]{};
    for (auto& var : darr)
        std::cin >> var;
    
    if (darr[0] == darr[1] && darr[1] == darr[2] && darr[2] == darr[0])
        return 0; // 세 수가 모두 같은 경우에는 아무것도 출력하지 않고 종료 (조건 3)
    
    if (darr[0] > darr[1] && darr[0] > darr[2])
        std::cout << darr[0];
    else if (darr[1] > darr[0] && darr[1] > darr[2])
        std::cout << darr[1];
    else if (darr[2] > darr[0] && darr[2] > darr[1])
        std::cout << darr[2];
    else // 이 문장이 실행된다는 것은 입력된 수 중 같은 수가 존재한다는 것
    {
        if (darr[0] == darr[1]) 
            std::cout << (darr[0] > darr[2] ? darr[0] : darr[2]);
        else if (darr[1] == darr[2]) 
            std::cout << (darr[1] > darr[0] ? darr[1] : darr[0]);
        else
            std::cout << (darr[2] > darr[1] ? darr[2] : darr[1]);
    }
}

이건 조금 어려우셨을 텐데, 위처럼 다양한 상황을 고려하여 프로그램을 작성하시면 됩니다...만

물론 이것도 나중에 STL을 배우면 아래처럼 간단하게 끝납니다.

#include <iostream>
#include <algorithm>

int main()
{
    double darr[3]{};
    std::for_each(std::begin(darr), std::end(darr), [](auto& n){ std::cin >> n; });
    std::sort(std::begin(darr), std::end(darr));
    if (darr[0] != darr[1])
        std::cout << darr[2];
}

물론 이 과정에 저런 if~else와 반복문들이 포함되어있기에 작동이 되는겁니다.그걸 알기 위해서 일단은 기초부터 차곡차곡 쌓아가야 합니다.

반응형