팀스파르타 내일배움캠프

[사전캠프 3일차]C# 걸어보기

creator2041 2025. 3. 19. 15:55

Lv1. 데이터와 연산자. ~ Lv2.제어문(조건문, 연산자)

[데이터 다루기 실습]

1. 실습 코드

   public static void firstclass()
   {
       int level = 10;
       int count = 0;
       float percent = 0.0f;
       float speed = 0.0f;
       string nickname = "홍길동";
       string description = "초인";

       int iten = 10;
       float ften = (float)iten;

       float fFive = 5.5f;
       int iFive = (int)fFive;

       int n = 10;
       float f = 0.5f;

       string A = n.ToString();
       string B = f.ToString();

       string strTen = "10";
       string strSix = "6";
       string strten = "10";
       string strsix = "6";

       int nTen = int.Parse(strTen);
       int nSix = int.Parse(strSix);
       int nten = Convert.ToInt32(strten);
       int nsix = Convert.ToInt32(strsix);

       /*parse 방식은 기본적으로 null값을 허용하지 않음. 무엇보다 문자열만 지원함.
        그에 반해 Convert방식은 null값이나 예외를 허용하며, 다양한 데이터 타입을 지원함.*/
   }

 

2. 고민했던 부분 

   - parse 방식이 있다는 것도 알고, Convert 방식이 있다는 것은 알고있었지만. 그 차이? 점까지는 알지 못했음.

3. 검색 후 알게 된 사실.

   - Convert는 예외값이나 null을 허용하는데다가, 다양한 값을 대상으로 지원하는 변환이고, parse는 예외없이 오로지 문자열-> 다른 타입 으로만 지원한다는 사실을 배우게 됨.

 

 

[연산자 실습]

1. 실습코드

public static void Secondclass()
{
    int ten = 10;

    int result = ten + 7;
    int result2 = ten - 3;
    int result3 = ten * 2;
    double result4 = double.Parse(ten.ToString()) * 1.5;
    double result5 = ten / 3.0;
    int result6 = ten % 4;

    string name = "노을";
    int year = 2023;

    string introduce = "안녕하세요. 제 이름은 " + name + "입니다.";
    string thisYear = "올해는 " + year + "년 입니다.";

    Console.WriteLine(introduce);
    Console.WriteLine(thisYear);

    bool result_1 = ten == 10;
    bool result_2 = ten != 11;
    bool result_3 = ten < 20;
    bool result_4 = ten > 5;
}

2. 고민했던 부분

   - 수업에 나오는 내용은 아니기도 하고, 사칙연산을 어려워하진 않지만. 가장 쉬운 Main메서드 진입을 필수적으로 해야한다는 사실을 잊고, 자꾸 매서드 오류가 나서 끙끙거림.

3. 검색 후 알게 된 사실.

   - C#스크립트는 Main()매서드에서 시작해야 한다는것!

 

[본격 프로그래밍 시작해보기]

1. 실습코드

    public static void thirdclass()
    {
        Console.WriteLine("숫자, 불리언, 문자열을 입력하세요.");
        string A = Console.ReadLine();

        if (int.TryParse(A, out int result1))
        {
            Console.WriteLine("숫자입니다.");
        }
        else if (bool.TryParse(A, out bool result2))
        {
            Console.WriteLine("불리언입니다.");
        }
        else
        {
            Console.WriteLine("문자열입니다.");
        }

        Console.WriteLine("숫자를 입력하세요.");
        string B = Console.ReadLine();

        if (int.Parse(B) >= 100)
        {
            Console.WriteLine($"{B} 은(는) 100보다 같거나 큰 수 입니다.");
        }
        else
        {
            Console.WriteLine($"{B} 은(는) 100보다 작은 수 입니다.");
                
        }

        Console.WriteLine("이전과 다른 숫자를 입력하세요.");
        string C = Console.ReadLine();

        if (int.Parse(C) % 2 == 0)
        {
            Console.WriteLine($"{C} 은(는) 짝수입니다.");
        }
        else
        {
            Console.WriteLine($"{C} 은(는) 홀수입니다.");
        }
    }

2. 고민했던 부분

   - 고민보단. 과제로 나온 if 와 case의 사용 용례.

3. 해결법

   - 간단하게도, case는 단일한 여러가지 경우의 수. 즉, 조건이나 이런것이 아니라. 단일한 여러가지의 선택지가 있을때 switch 함수를 통해 사용해주면 편할것 같고.

   - if는 말그대로 조건이 길고, 조건에 따른 결과값을 출력할때 사용할 것으로 보인다.

   - 예를들어, 발더스3에서 대화를 할때 대화 선택지에 따라 다른 대화를 출력하게 하는것은 switch 함수를 사용하겠지만

   - 기존 진행에서 생긴 빌드로, '특정 맵에' '특정 동료'와 같이 와야 이벤트가 활성하되게 하는 방법등은 if를 쓸듯하다.

 

 

[숫자...인가요?]

1. 실습코드

    public static void firstclass()
    {
        Console.WriteLine("첫번째 수를 입력해 주세요.");
        string A = Console.ReadLine();
        Console.WriteLine("두번째 수를 입력해 주세요.");
        string B = Console.ReadLine();

        if (int.TryParse(A, out int result1) && int.TryParse(B, out int result2))
        {
            Console.WriteLine("두 데이터는 모두 숫자입니다.");
        }
        else
        {
            Console.WriteLine("숫자가 아닙니다.");
        }

        Console.WriteLine("또 다른 첫번째 수를 입력해 주세요.");
        string C = Console.ReadLine();
        Console.WriteLine("또 다른 두번째 수를 입력해 주세요.");
        string D = Console.ReadLine();

        if (int.TryParse(C, out int result3) && int.TryParse(D, out int result4))
        {
            Console.WriteLine("두 데이터는 모두 숫자입니다.");
        }
        else if (int.TryParse(C, out int result5) || int.TryParse(D, out int result6))
        {
            Console.WriteLine("두 데이터 중 하나는 숫자입니다.");
        }
        else
        {
            Console.WriteLine("두 데이터 모두 숫자가 아닙니다.");
        }

        Console.WriteLine("마지막 첫번째 수를 입력해 주세요.");
        string E = Console.ReadLine();
        Console.WriteLine("마지막 두번째 수를 입력해 주세요.");
        string F = Console.ReadLine();

        if (int.TryParse(E, out int result7) && int.TryParse(F, out int result8))
        {
            if (result7 == result8)
            {
                Console.WriteLine($"{E}와(과) {F}은(는) 같습니다.");
            }
            else if (result7 > result8)
            {
                Console.WriteLine($"{E}은(는) {F}보다 큽니다.");
            }
            else
            {
                Console.WriteLine($"{E}은(는) {F}보다 작습니다.");
            }
        }
        else
        {
            Console.WriteLine("두 개의 숫자를 입력해세요.");
        }
    }

2. 고민했던 부분

   - 확실히 난이도가 확 뛴다. 숫자를 비교해야 하다보니, 어떻게 추출해야 할지등에 대해 고민하게 되고. 이에 대해 비교를 어찌할 것인지도 고민이 됬다. 

3. 해결법

   - 마지막 문제는 힌트코드를 보니 미리 입력을 받고, 그것을 bool isTnt1 = int TryParse(input1, out num1)
로 해서 환산 받고 했다. 

   - 확실히 그 방법은 쉽고 효과적이어 보이지만, 나는 다른 방법으로. 트라이펄스로 E와 F를 각각 int로 추출해버리고. 순수하게 비교했다.

   - 둘 다 틀린 방법은 아닌듯 하지만, 확실히 힌트의 방법이 더 효과가 있을 듯하다. 앞으로도 효율적인 코드를 찾을 수 있도록 노력할것이다.

 

[대한민국의 수도는?]

1. 실습코드

    public static void Secondclass()
    {
        Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
        Console.WriteLine("1. 인천 2. 평창 3. 서울 4. 부산");
        string A = Console.ReadLine();
        switch (A)
        {
            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;
        }
    }

내가 생각한 코드. switch 함수를 사용해 A를 규정하려 하였다.

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("숫자가 아닙니다.");
}

자료에서 준 최종 결론. 이번에도 이전과 같이 입력된 번호를  치환해줌으로서, 숫자값이 맞는지 사전에 검증을 하였다. 

역시 뭔가 배운사람들은 다르다. 나의 경우, 이용자가 그 값안에 숫자가 아닌 다른 문자열을 넣을수도있기에 문제가 된다.

2. 고민했던 부분

   - 고민했던 부분은 위의 코드와 같다. Switch만 써서 더 간단해보이지만. 결국. 선택지가 많아진다거나, 입력의 경우의 수가 많아질 경우에는 문제가 생길수있다. 따라서, 해당 값이 숫자인지 아닌지를 확인할 문구를 넣어주면 좋을 듯하다.

3. 해결법

    public static void Secondclass()
    {
        Console.WriteLine("Q. 대한민국의 수도는 어디인가요?");
        Console.WriteLine("1. 인천 2. 평창 3. 서울 4. 부산");
        string A = Console.ReadLine();

        if (int.TryParse(A, out int result1))
        {
            switch (A)
            {
                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("숫자를 입력해주세요.");
        }
    }

   - if조건문을 활용. 결국 A에 숫자값이 아닌 다른 값이 입력될 경우. 숫자를 입력해달라는 경고를 띄울수있도록 변경하였다.



[여행을 떠나요]

1. 실습코드

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

        if(int.TryParse(A,out int result1))
        {
            switch (A)
            {
                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("숫자가 아닙니다.");
        }
    }

2. 고민했던 부분

   - 이전에 고민했던 부분으로, 해결되어 후련함.

3. 해결법

   - if는 조건문이라 부르고. switch는 선택문이라고 해서. 용도가 같은데 왜그럴까 생각했는데 확실히 알수있는 실습이었음.

 

 

 

[이름 찾기!]

1. 실습코드

    public static void fourthclass()
    {

        bool isSuccess;

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

            if (input.Length >= 3 && input.Length <= 10)
            {
                Console.WriteLine($"안녕하세요! 제 이름은 {input} 입니다.");
            }
            else
            {
                Console.WriteLine("이름이 3~10글자가 아닙니다.");
            }

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

    }

2. 고민했던 부분

   - 난이도가 갑자기 확 높아져서 당황했다. if, else를 적용시키는건 쉬웠지만. 반복시키는게 쉽지 않았었고, 이에 대해 고민을 꽤 오래했다.

3. 해결법

   - 결국 힌트를 보긴 했지만. do - while을 어쩔때 사용하고 어떻게 해야하는지 확실히 알수있었다!!