3월 21일 - 연습 문제 4, 5, 6, 7

변재웅·2025년 3월 21일

오늘의 목표는 걷기반을 다 끝내고 완벽하게 이해해서 변수와 함수에 익숙해지기

조건문 사용하기

  • 연습문제 4 - 1 , 2
{
    Console.WriteLine("첫번째 수를 입력해 주세요.");
    string input1 = Console.ReadLine();

    Console.WriteLine("두번째 수를 입력해 주세요.");
    string input2 = Console.ReadLine();

	int num1, num2;

    bool isNum1 = int.TryParse(input1, out num1);
    bool isNum2 = int.TryParse(input2, out num2);

    if(isNum1 && isNum2)
    {
        Console.WriteLine("두 데이터는 모두 숫자입니다.");
    }
    else if(isNum1 || isNum2)
    {
        Console.WriteLine("하나의 데이터만 숫자입니다.");
    }
    else
    {
        Console.WriteLine("두 데이터 모두 숫자가 아닙니다.");
    }
}

작동 잘 되는것을 확인한 다음
힌트를 보고나서 느낀점 확실히 가독성을 높이는게 좋을것 같음

{
	Console.WriteLine("첫번째 수를 입력해 주세요.");
    int num1;
    string input1 = Console.ReadLine();
    bool isNum1 = int.TryParse(input1, out num1);
    
    Console.WriteLine("두번째 수를 입력해 주세요.");
    int num2;
    bool isNum2 = int.TryParse(input2, out num2);
    string input2 = Console.ReadLine();
    
    if(isNum1 && isNum2)
    {
        Console.WriteLine("두 데이터는 모두 숫자입니다.");
    }
    else if(isNum1 || isNum2)
    {
        Console.WriteLine("하나의 데이터만 숫자입니다.");
    }
    else
    {
        Console.WriteLine("두 데이터 모두 숫자가 아닙니다.");
    }
}

힌트 답은 이렇게 적혀있었는데
옹기종기 모여 있어서 보기에 좋다
첫번째 입력 수와 두번째 입력 수의 코드가 나뉘어져 있어서 공부하며 알아보기에 더 좋은것 같다

  • 연습문제 4 - 3
// 연습문제 4 - 3
{
    Console.WriteLine("첫번째 수를 입력해 주세요.");
    string input1 = Console.ReadLine();

    Console.WriteLine("두번째 수를 입력해 주세요.");
    string input2 = Console.ReadLine();

    int num1, num2;

    bool isNum1 = int.TryParse(input1, out num1);
    bool isNum2 = int.TryParse(input2, out num2);

    if(isNum1 && isNum2)
    {
        if(num1 == num2)
        {
            Console.WriteLine(input1 + "와(과)" + input2 + "은(는) 같습니다.");
        }
        else if(num1 > num2)
        {
            Console.WriteLine(input1 + "은(는)" + input2 + "보다 큽니다.");
        }
        else
        {
            Console.WriteLine(input1 + "은(는)" + input2 + "보다 작습니다.");
        }
    }
    else
    {
        Console.WriteLine("두 개의 숫자를 입력해주세요.");
    }
}
//a 와 b 조건을 모두 만족 하는가? true -> (a && b)
//a 와 b 둘 중 하나라도 만족 하는가? true -> (a || b)

작동 확인하고
여기도 힌트를 함 보자

{
	Console.WriteLine("첫번째 수를 입력해 주세요.");
    int num1;
    string input1 = Console.ReadLine();
    bool isInt1 = int.Tryparse(input1, out num1);
    
    Console.WriteLine("두번째 수를 입력해 주세요.");
    int num2;
    string input2 = Console.ReadLine();
    bool inInt2 = int.Tryparse(input2, 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("두 개의 숫자를 입력해주세요.");
    }
}

그러고 보니 콘솔에서 친 값은 input1,2 와 num1,2 가 적용되고 있으니 둘중 아무거나 사용해도 상관 없는건가... 잘 모르겠다


조건문 활용 가능

  • 연습문제 5
Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
Console.WriteLine("1.인천   2.평창   3.서울   4.부산");

string input = Console.ReadLine();
int num;
bool isNum = int.TryParse(input, out num);

int ans = 3; 

if(isNum)
{
    if(num == ans)
    {
        Console.WriteLine("정답입니다!");
    }
    else if(num > 4)
    {
        Console.WriteLine("1~4의 숫자를 입력해주세요.");
    }
    else
    {
        Console.WriteLine("오답입니다!");
    }
}
else
{
    Console.WriteLine("숫자가 아닙니다.");
}

작동 하는것을 확인
정답을 확인해보자

Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
Console.WriteLine("1.인천   2.평창   3.서울   4.부산");

string input = Console.ReadLine();
int num;
bool isInt = int.TryParse(input, out num);

if (isInt)
{

    if (num >= 1 && num <= 4)
    {
        if (num == 3)
        {
            Console.WriteLine("정답입니다!");
        }
        else
        {
            Console.WriteLine("오답입니다!");
        }
    }
    else
    {
        Console.WriteLine("1~4 의 숫자를 입력해주세요.");
    }
}
else
{
    Console.WriteLine("숫자가 아닙니다.");
}

아하... 조건문에 그냥 1보다 크거나 같고 4보다 작거나 같은 조건을 둘다 만족할 때를 설정하면 된다는 것을 확인
내가 만들어본 코드는
3인가? -> 정답 출력
4를 초과했나? -> 1~4의 숫자를 입력하라 출력
4이하의 숫자중 3을 뺀 나머지 1,2,4 인가? -> 오답 출력

정답은
1이상 4이하 중에서 3인가? -> 정답 출력
1, 2, 4 인가? -> 오답 출력
1이상 4이하의 숫자가 아닌 나머지 숫자인가? -> 1~4 숫자입력 출력
숫자인가 -> 숫자가 아닙니다 출력
의 순서를 거침

굳이 ans 변수에 3을 저장할 필요가 없다는 것도 확인

정답을 보고나서 생각해보니 내가 만든 코드에 1부터 4까지의 숫자만을 활용하는게 아니라 그저 4보다 큰 숫자라면 이라는 조건을 이용
음수를 사용하면 어떻게 출력되는지 확인
오답입니다 라고 뜨는걸 확인하고 이마를 침
반쪽짜리 정답이였다.


  • 연습문제 6
using System.Linq.Expressions;

Console.WriteLine("어디로 여행을 가고 싶나요?");
Console.WriteLine("1.제주도   2.코타키나발루   3.싱가포르   4.태국");

string input = Console.ReadLine();
int num;
bool isInt = int.TryParse(input, out num);

if (isInt)
{
    if (1 <= num &&  num <= 4)
    {
        if (num == 1)
        {
            Console.WriteLine("제주도는 한국의 섬으로 비교적 방문이 쉽고 다양한 놀거리/먹거리가 준비되어 있습니다");
        }
        else if (num == 2)
        {
            Console.WriteLine("코타키나발루는 말레이시아 사바주의 주도로, 말레이시아 동부 보르네오섬 최대의 도시입니다.");
        }
        else if (num == 3)
        {
            Console.WriteLine("싱가포르는 동남아시아, 말레이 반도의 끝에 위치한 섬나라이자 항구 도시로 이루어진 도시 국가입니다.");
        }
        else
        {
            Console.WriteLine("태국은 중국문화, 말레이문화, 불교문화, 힌두문화, 이슬람 문화가 혼재되어 있습니다. 불교적인 모습을 많이 띄지만, 문화 자체는 색다르고 스펙트럼이 넓은 형태를 띄고 있어요.");
        }

    }
    else
    {
        Console.WriteLine("1~4의 숫자를 입력해주세요.");
    }
}
else
{
    Console.WriteLine("숫자가 아닙니다.");
}

익숙한 if 만을 가지고 사용한 스크립트
예를 들어주는 스크립트를 보니 switch case 사용을 확인
나도 한번 사용해서 만들어보기로 함

using System.Linq.Expressions;

Console.WriteLine("어디로 여행을 가고 싶나요?");
Console.WriteLine("1.제주도   2.코타키나발루   3.싱가포르   4.태국");

string input = Console.ReadLine();
int num;
bool isInt = int.TryParse(input, out num);

if (isInt)
{
    switch (num)
    {

        case 1:
            Console.WriteLine("제주도는 한국의 섬으로 비교적 방문이 쉽고 다양한 놀거리/먹거리가 준비되어 있습니다.");
            break;

        case 2:
            Console.WriteLine("코타키나발루는 말레이시아 사바주의 주도로, 말레이시아 동부 보르네오섬 최대의 도시입니다.");
            break;

        case 3:
            Console.WriteLine("싱가포르는 동남아시아, 말레이 반도의 끝에 위치한 섬나라이자 항구 도시로 이루어진 도시 국가입니다.");
            break;

        case 4:
            Console.WriteLine("태국은 중국문화, 말레이문화, 불교문화, 힌두문화, 이슬람 문화가 혼재되어 있습니다. 불교적인 모습을 많이 띄지만, 문화 자체는 색다르고 스펙트럼이 넓은 형태를 띄고 있어요.");
            break;

        default:
            Console.WriteLine("1~4 의 숫자를 입력해주세요.");
            break;
    }
}
else
{
    Console.WriteLine("숫자가 아닙니다.");
}

default 부분하고 switch case 적용 방법이 정확하게 기억나지 않아 자료와 읽으면서 만들고 정답을 확인
아직 if문이 익숙해서 그런가 switch case 는 좀더 사용해봐야 익숙하게 사용 가능할것 같음


  • 연습문제 7 - 1
Console.WriteLine("이름을 입력해주세요. (3~10글자)");

string name = Console.ReadLine();

if (name.Length < 3 || name.Length > 10)
{
    Console.WriteLine("이름을 확인해주세요.");
}
else
{
    Console.WriteLine($"안녕하세요! 제 이름은 {name} 입니다.");
}
  • 연습문제 7 - 2
bool isValid;

do
{
    Console.WriteLine("이름을 입력해주세요. (3~10글자)");
    string input = Console.ReadLine();

    Console.Clear();

    if (input.Length >= 3 && input.Length <= 10)
    {
        Console.WriteLine($"안녕하세요! 제 이름은 {input} 입니다.");
    }
    else
    {
        Console.WriteLine("이름을 확인해주세요.");
    }

    isValid = input.Length >= 3 && input.Length <= 10;
}
while (!isValid);

이 문제는 열심히 머리를 써봤지만 전혀 모르겠어서 정답을 확인후 공부
그러니깐 do 는 명령어를 실행시키는 용도고 while 은 반복시키는 용도라고 이해되었다
isValid 라는 변수를 만들어 이름의 길이가 3보다 크거나 같다 와 10보다 작거나 같다 라는 조건을 둘다 만족할때 참 이라면 명제가 저장되고 While 조건으로 isValid 가 거짓이면 반복한다 라는 결론

아 그리고 문장열 안에 변수를 집어넣을 수 있는 방법은 없을까 싶어서 찾아본 결과 다행이 있더라
https://blockdmask.tistory.com/359

0개의 댓글