사전캠프/걷기반

걷기반 Lv.2 숫자...인가요?

서보훈 2024. 8. 16. 17:17

1. 숫자를 두번 입력받아서 두번 다 숫자인지 확인

  • 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
  • “두번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
    • 첫번째 수와 두번째 수 모두 숫자 라면 - “두 데이터는 모두 숫자입니다.”
    • 모두 숫자가 아니라면 - “숫자가 아닙니다.”

이전 프로그래밍 시작하기에서 사용한 TryParse와 if문을 사용하는것은 같으나, 2개의 입력이 모두 숫자일경우 라는 조건이 추가되었습니다.

즉, if문에서 And 연산을 해야합니다.

 

C# 에서 사용하는 논리 연산자는 3가지로 AND, OR, NOT 연산을 당담하는 연산자가 하나씩 있습니다.

AND &&
OR ||
NOT !

(OR 값의 경우 \키를 시프트를 누르고 입력하면 됩니다.)

해당 연산자들은 bool 형식에만 사용할 수 있으며 각각 이러한 역할을 합니다

AND 연산시 (A&&B)
A B A&&B
true true true
true false false
false true false
false false false

 

OR 연산시 (A||B)
A B A&&B
true true true
true false true
false true true
false false false

 

NOT 연산시 (!A)
A !A
true false
false true

 

AND 연산은 양쪽 모두 true일때 만 true 값을 반환하고

OR 연산은 둘중 하나라도 true값일 있으면 true를 반환합니다.

NOT 연산의 경우 bool변수 앞에 붙으며, 해당값을 반전하는 역할을 합니다.

 

문제를 풀어보도록 하겠습니다.

{
    //첫번째 입력받고, 정수형 변환시도
    Console.Write("첫번째 수를 입력해 주세요 : ");
    string inputFirst = Console.ReadLine();
    int num1;
    bool isInt1 = int.TryParse(inputFirst, out num1);

    //두번째 입력 받고, 정수형 변환 시도
    Console.Write("두번째 수를 입력해 주세요 : ");
    string inputSecond = Console.ReadLine();
    int num2;
    bool isInt2 = int.TryParse(inputSecond, out num2);

    //두수가 정수형인지 판단
    //둘 다 정수형일경우
    if(isInt1 && isInt2)
    {
        Console.WriteLine("두 데이터 모두 숫자입니다.");
    }
    else
    {
        Console.WriteLine("숫자가 아닙니다.");
    }
}

두개의 입력을 받아야하기 때문에, 입력을 받고, 정수형인지 판단하는 블록이 2번 나타납니다.

 

두번의 입력을 받으면 if문에 AND 연산자를 사용하여 두개의 bool 변수가 모두 true일때만, true를 반환받아 두 데이터가 모두 숫자임을 출력합니다.

 

2번의 입력이 모두 숫자여야만 두 데이터가 모두 숫자입니다. 결과가 나오는것을 볼 수 있습니다.

 


2. 숫자를 두번 입력받아서 두번 다 숫자인지 하나만 숫자인지 확인

  • 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
  • “두번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
    • 첫번째 수와 두번째 수 모두 숫자 라면 - “두 데이터는 모두 숫자입니다.”
    • 둘 중 하나만 숫자라면 - “하나의 데이터만 숫자입니다.”
    • 숫자가 하나도 없다면 - “두 데이터 모두 숫자가 아닙니다.”

둘 중 하나만 숫자라면 조건이 추가된 형태입니다.

 

입력을 받는 부분은 변하지 않았기 때문에 위의 답에서 if문을 수정해주면 해결할 수 있습니다.

 

바로 문제를 풀어보도록 하겠습니다.

{
    //첫번째 입력받고, 정수형 변환시도
    Console.Write("첫번째 수를 입력해 주세요 : ");
    string inputFirst = Console.ReadLine();
    int num1;
    bool isInt1 = int.TryParse(inputFirst, out num1);

    //두번째 입력 받고, 정수형 변환 시도
    Console.Write("두번째 수를 입력해 주세요 : ");
    string inputSecond = Console.ReadLine();
    int num2;
    bool isInt2 = int.TryParse(inputSecond, out num2);

    //두수가 정수형인지 판단
    //둘 다 정수형일경우
    if (isInt1 && isInt2)
    {
        Console.WriteLine("두 데이터 모두 숫자입니다.");
    }
    //둘중 하나만 정수형인경우
    else if(isInt1 || isInt2)
    {
        Console.WriteLine("하나의 데이터만 숫자입니다.");
    }
    else
    {
        Console.WriteLine("두 데이터 모두 숫자가 아닙니다.");
    }
}

if문에 else if 문단이 하나 추가되었습니다.

else if의 경우, 첫 if문이 false일 경우, else if 에 적힌 조건식을 판단해서 실행 여부를 결정하게 됩니다.

만약, 이 else if의 조건식이 false일경우, 다음 else if 가 있으면 해당 조건식의 true,false 여부를 판단하게 되고, 없을경우 else문으로 이동하거나, else문이 없을경우 if문이 종료되게 됩니다.

 

이번엔 첫번째 입력이 정수인지와 두번째 입력이 정수인지 판단하는 bool 형식을 OR 연산자로 판단하여, 두 bool 변수중 하나라도 true 일 경우, 해당 else if 문에 적힌 코드를 실행하게 됩니다.

 

결과를 보도록 하겠습니다. 양쪽 다 정수형이거나, 문자열일경우의 결과는 같기때문에 생략하겠습니다.

순서와 관계 없이, 문자열이 하나라도 입력되면 하나의 데이터만 숫자입니다. 가 출력되는것을 볼 수 있습니다.

 


3. 숫자를 두번 입력받아서 두 수를 비교

  • 프로그램을 처음 시작하면 “첫번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
  • “두번째 수를 입력해 주세요.” 메시지 출력
  • 메시지를 입력하고 Enter
    • 둘 중 하나라도 숫자가 아니라면 - “두 개의 숫자를 입력해주세요.”
    • 첫번째 수와 두번째 수 모두 숫자 라면
      • 첫번째 수와 두번째 수가 같다면 - ”xx 와(과) xx 은(는) 같습니다.”
      • 첫번째 수와 두번째 수가 다르다면
        • 첫번째 수가 더 크다 - “xx 은(는) xx 보다 큽니다.”
        • 첫번째 수가 작다 - “xx 은(는) xx 보다 작습니다.”

이전 3번의 100이상, 미만 판단과 비슷하지만, 이번엔 두 수를 입력하고 비교하는 문제입니다.

 

역시 2중 if문을 사용하여 풀어낼 수 있으며, 첫번째 if문은 두 입력이 모두 정수형인지를 판단하고, 두번째 if문에서 두 수의 크기를 비교하게 됩니다.

 

또한 여기서는 관계형 연산자를 사용하게 됩니다.

크다, 작다, 크거나 같다, 작거나 같다 등의 연산자는 흔히 사용하는 그것을 사용하게됩니다

(A가 B 보다) 크다 (A가 B 보다) 작다 (A가 B보다)
크거나 같다
(A가 B보다)
작거나 같다
(A와 B가)
같다
.(A와 B 가)
같지 않다
A  >  B A  <  B A  >=  B A  <= B A == B  A != B

같다와 같지 않다가 익숙하지 않을 수 있습니다.

같다의 경우 일반적으로 = 을 사용할경우, 변수에 값을 입력하는 부분과 같아지기 때문에, 문제가 발생할 수 있습니다.

그렇기 때문에 == 을 사용하여 표현하게 됩니다. 또한 같지 않다의 경우, NOT 연산을 떠올려서 기억해 주시면 됩니다.

 

또한 비교 연산자의 경우 결과가 True와 False로 출력됩니다.

if (A == B)

만약 이러한 if문이 있다면, A와 B 의 변수에 저장된 값이 같으면 True를 반환하여 if문이 실행되고, 같지 않으면 False를 반환하여 실행되지 않습니다.

 

그리고 크거나 같다, 작거나 같다, 같지 않다의 비교형 연산자를 사용할 경우, = 기호가 뒤로 와야합니다.

기호가 반대로 될 경우, 비교형 연산자로 인식되지 않고, 오류가 발생하게 됩니다.

 

이제 문제를 풀어보도록 하겠습니다.

{
    //첫번째 입력받고, 정수형 변환시도
    Console.Write("첫번째 수를 입력해 주세요 : ");
    string inputFirst = Console.ReadLine();
    int num1;
    bool isInt1 = int.TryParse(inputFirst, out num1);

    //두번째 입력 받고, 정수형 변환 시도
    Console.Write("두번째 수를 입력해 주세요 : ");
    string inputSecond = Console.ReadLine();
    int num2;
    bool isInt2 = int.TryParse(inputSecond, out num2);

    //둘다 정수형인지
    if(isInt1 && isInt2)
    {
        //첫번째 입력이 두번째 입력보다 큰 경우
        if(num1 > num2)
        {
            Console.WriteLine($"{num1} 은(는) {num2} 보다 큽니다.");
        }
        //첫번째 입력이 두번째 입력보다 작은 경우
        else if(num1 < num2)
        {
            Console.WriteLine($"{num1} 은(는) {num2} 보다 작습니다.");
        }
        //나머지(두 입력이 같을경우)
        else
        {
            Console.WriteLine($"{num1} 와(과) {num2} 는 같습니다");
        }
    }
    else
    {
        Console.WriteLine("두 개의 숫자를 입력해주세요");
    }
}

입력을 받는 부분은 위의 두 문제와 같기 때문에 if문의 구성을 눈여겨 보시면 됩니다.

 

이전 100이상, 이하 판정하기와 같이 첫번째 if문에 두 입력이 정수인지 판단하는 bool 형 변수 2개의 AND 연산을 실행하여 두 수 모두 정수형인지를 판단합니다.

 

두 수가 모두 정수형일때만, 다음 if문을 실행하여 첫번째 입력한 정수를 기준으로 두번째 입력한 정수가 큰지, 작은지, 같은지를 구분합니다.


해당 if문을 작성한 코드입니다.

if(num1 > num2)
{
    
}
else if(num1 < num2)
{
    
}
else
{
    
}

이 부분의 작성은 작성자의 자유이며, 저의 경우 같은 경우를 최 후순위로 만들어 else문이 같다 연산을 실행하도록 만들었습니다. 

여기는 코드를 짜는 사람의 스타일이 반영되며, 아래 코드로도 무관하게 작동합니다.

if(num1 < num2)
{
    
}
else if(num1 == num2)
{
    
}
else
{
    
}
if(num1 > num2)
{
    
}
else if(num1 == num2)
{
    
}
else
{
    
}

요지는 else에 한가지 경우의 수만 남도록 if문을 구성해주시면 됩니다.


결과를 보도록 하겠습니다.

 

문자열이 입력된 경우의 결과는 생략하도록 하겠습니다.

첫번째 입력을 기준으로 두번째 입력된 값을 판단하여 큰지, 작은지 같은지를 출력하는 모습을 볼 수 있습니다.