11. C# 문법 종합반 2주차

이규성·2023년 11월 7일
0

TIL

목록 보기
15/106

11/07 사전 캠프에서 공부했던 내용의 개념적인 부분들을 알 수 있어서 좋다.

📌조건문과 반복문

새로 습득한 정보를 기록한다.

else if의 이해
플레이어의 랭크 점수를 입력하면 등급을 알려주는 프로그램을 만들어 보자.

Console.Write("플레이어의 랭크 점수를 입력하세요: ");
int score = int.Parse(Console.ReadLine());

string playerRank = "";

if (score >= 90)
{
    playerRank = "Diamond";
}
else 
{
    if (score >= 80)
    {
        playerRank = "Platinum";
    }
    else
    {
        if (score >= 70)
        {
            playerRank = "Gold";
        }
        else
        {
            if (score >= 60)
            {
                playerRank = "Silver";
            }
            else
            {
                playerRank = "Bromze";
            }
        }
    }
}
Console.WriteLine("플레이어의 등급은 {0} 입니다. ", playerRank);

기능상 문제가 없지만 코드가 지저분하다. 조건문의 코드가 한 줄, 한 묶음이라면 중괄호의 생략이 가능하다.

if (score >= 90)
{
    playerRank = "Diamond";
}
else 

    if (score >= 80)
    {
        playerRank = "Platinum";
    }
    else
    
        if (score >= 70)
        {
            playerRank = "Gold";
        }
        else
        
            if (score >= 60)
            {
                playerRank = "Silver";
            }
            else
            {
                playerRank = "Bromze";
            }

이렇게 else문의 중괄호를 삭제하고

if (score >= 90)
{
    playerRank = "Diamond";
}
else if (score >= 80)
{
    playerRank = "Platinum";
}
else if (score >= 70)
{
    playerRank = "Gold";
}
else if (score >= 60)
{
    playerRank = "Silver";
}
else
{
    playerRank = "Bromze";
}

ctrl+k+f 로 들여쓰기하여 정리해 준다.
else if 의 개념을 순서대로 정리하며 알려주시니 이해가 쏙쏙 된다 !

📌조건문 실습

홀수와 짝수 구분하기

Console.Write("번호를 입력하세요: ");
int number = int.Parse(Console.ReadLine());

if (number % 2 == 0)
{
    Console.WriteLine("짝수입니다.");
}
else
{
    Console.WriteLine("홀수입니다.");
}

int / int의 결과값은 정수이다. 2로 나누었을 때 0으로 딱 떨어지면 늘 짝수, 1이 남으면 늘 홀수이다. 나눗셈과 나머지의 연산자 활용은 C#에서 정말 강력한 기능이라고 생각한다.

등급 출력

int playerScore = 100;
string playerRank = "";

switch (playerScore / 10) // 입력되는 값을 그룹화 시키기 위한 조건
{
	case 10: // 100 입력 시 case 9와 같은 값 출력을 위해 중첩 !
	case 9:
		playerRank = "Diamond";
		break;
	case 8:
		playerRank = "Platinum";
		break;
	case 7:
		playerRank = "Gold";
		break;
	case 6:
		playerRank = "Silver";
		break;
	default:
		playerRank = "Bronze";
		break;
}

Console.WriteLine("플레이어의 등급은 " + playerRank + "입니다.");

switch문을 사용하려면 입력되는 값이 상수여야한다. 하지만 playerScore의 입력 값은 0~100사이의 정수, case를 100개나 만들 순 없으니 공통점을 찾아내서 그룹화시켜야 한다.
90~99, 80~89, 70~79, 60~69, 50~59 의 공통점은 10으로 나누었을 때의 결과값이 같다 !

switch문의 사용법 중 조건으로 입력값을 조절하는 방법을 배웠다.

알파벳 판별

입력한 문자가 영어 알파벳인지 판단하는 프로그램을 만들어 보자

 Console.Write("문자를 입력해주세요: ");
 char input = Console.ReadLine()[0]; // indexing

 if ((input >= 'a' && input <= 'z') || (input >= 'A' && input <= 'Z'))
 {
     Console.WriteLine("알파벳입니다.");
 }
 else
 {
     Console.WriteLine("알파벳이 아닙니다.");
 }

알파벳에 관계 연산자를 사용할 수 있는 걸 알게 되었다 !

📌반복문

for문과 while문은 같은 결과값을 만들어낼 수 있지만 차이점이 있다

  • for: 반복 횟수가 정해져 있을 때 사용하면 좋다. 그리고 조건을 명확하게 알아볼 수 있다.
  • while: 반복 조건에 따라 실행 횟수가 유동적이다. 코드를 더 간결하게 작성할 수 있다.

각 상황에 맞는 반복문을 사용할 수 있는 판단력을 길러야한다고 생각한다.

foreach 반복문

배열이나 컬렉션의 데이터를 반복한다.

string[] inventory = { "검", "방패", "활", "화살", "물약" };

foreach (string item in inventory)
{
    Console.WriteLine(item);
}

출력:

방패

화살
물약

게임에서 활용할 방법이 다양하게 떠오른다.

중첩 반복문

for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 3; j++)
    {
        Console.WriteLine("i: {0}, j: {1}", i, j);
    }
}

i가 들어간 반복문이 한 번 실행이 될 때, j가 들어간 반복문이 완전 반복한다.
즉, (i=0, j=0, 1, 2), (i=1, j=0, 1, 2).... 이렇게 실행이 된다.

break, countinue

  • braak 반복문을 중지하고 즉시 빠져나온다.
  • continue 조건이 true일 때 결과값을 건너뛰고 다음으로 넘어간다.
for (int i = 1; i <= 10; i++)
{
    if (i % 3 == 0)
    {
        continue; // 3의 배수인 경우 다음 숫자로 넘어감
    }

    Console.WriteLine(i);
    if (i == 7)
    {
        break; // 7이 출력된 이후에는 반복문을 빠져나감
    }
}

📌반복문 학습

구구단 !

반복문을 활용하여 구구단을 만들어 보자

Console.Write("숫자를 입력해주세요: ");
int j = int.Parse(Console.ReadLine());

for (int i = 0; i < 10; i++)
{
    int x = i + 1;

    Console.WriteLine(j + "x" + x + "=" + (j * x));
}
// 출력값
숫자를 입력해주세요: 5
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
5x10=50

사전캠프 때의 기억을 살려 어렵지 않게 프로그램을 만들 수 있었다. 그러나.....

예제 코드

for (int i = 2; i <= 9; i++)
{
    for (int j = 1; j <= 9; j++)
    {
        Console.WriteLine(i + " x " + j + " = " + (i * j));
    }
}

2단부터 9단까지 전체를 출력하라는 말이었다. 민망해졌지만 코드를 살펴보자.
중첩 반복문을 이용하였고 i가 한 번 반복 때 j가 1~9까지 반복된다. i * j를 작성하여 완성 !

// 출력값
2 x 1 = 2       2 x 2 = 4       2 x 3 = 6       2 x 4 = 8       2 x 5 = 10      2 x 6 = 12      2 x 7 = 14      2 x 8 = 16      2 x 9 = 18
3 x 1 = 3       3 x 2 = 6       3 x 3 = 9       3 x 4 = 12      3 x 5 = 15      3 x 6 = 18      3 x 7 = 21      3 x 8 = 24      3 x 9 = 27
4 x 1 = 4       4 x 2 = 8       4 x 3 = 12      4 x 4 = 16      4 x 5 = 20      4 x 6 = 24      4 x 7 = 28      4 x 8 = 32      4 x 9 = 36
5 x 1 = 5       5 x 2 = 10      5 x 3 = 15      5 x 4 = 20      5 x 5 = 25      5 x 6 = 30      5 x 7 = 35      5 x 8 = 40      5 x 9 = 45
6 x 1 = 6       6 x 2 = 12      6 x 3 = 18      6 x 4 = 24      6 x 5 = 30      6 x 6 = 36      6 x 7 = 42      6 x 8 = 48      6 x 9 = 54
7 x 1 = 7       7 x 2 = 14      7 x 3 = 21      7 x 4 = 28      7 x 5 = 35      7 x 6 = 42      7 x 7 = 49      7 x 8 = 56      7 x 9 = 63
8 x 1 = 8       8 x 2 = 16      8 x 3 = 24      8 x 4 = 32      8 x 5 = 40      8 x 6 = 48      8 x 7 = 56      8 x 8 = 64      8 x 9 = 72
9 x 1 = 9       9 x 2 = 18      9 x 3 = 27      9 x 4 = 36      9 x 5 = 45      9 x 6 = 54      9 x 7 = 63      9 x 8 = 72      9 x 9 = 81

여기서 강사님의 피드백이 구구단이 '열'방향으로 출력되고 있는데 '행'방향으로 출력되게 스스로 바꿔보자고 하셨다. 처음에는 출력 콘솔창을 들여쓰기나 뭐 그런 게 가능한가?? 싶어서 시도했다가 코드를 꼼꼼히 읽어보니 답은 간단했다.

for (int i = 1; i <= 9; i++)
{
    for (int j = 2; j <= 9; j++)
    {
        Console.Write(j + " x " + i + " = " + (i * j) + "\t");
    }
    Console.WriteLine();
// 출력값
2 x 1 = 2       3 x 1 = 3       4 x 1 = 4       5 x 1 = 5       6 x 1 = 6       7 x 1 = 7       8 x 1 = 8       9 x 1 = 9
2 x 2 = 4       3 x 2 = 6       4 x 2 = 8       5 x 2 = 10      6 x 2 = 12      7 x 2 = 14      8 x 2 = 16      9 x 2 = 18
2 x 3 = 6       3 x 3 = 9       4 x 3 = 12      5 x 3 = 15      6 x 3 = 18      7 x 3 = 21      8 x 3 = 24      9 x 3 = 27
2 x 4 = 8       3 x 4 = 12      4 x 4 = 16      5 x 4 = 20      6 x 4 = 24      7 x 4 = 28      8 x 4 = 32      9 x 4 = 36
2 x 5 = 10      3 x 5 = 15      4 x 5 = 20      5 x 5 = 25      6 x 5 = 30      7 x 5 = 35      8 x 5 = 40      9 x 5 = 45
2 x 6 = 12      3 x 6 = 18      4 x 6 = 24      5 x 6 = 30      6 x 6 = 36      7 x 6 = 42      8 x 6 = 48      9 x 6 = 54
2 x 7 = 14      3 x 7 = 21      4 x 7 = 28      5 x 7 = 35      6 x 7 = 42      7 x 7 = 49      8 x 7 = 56      9 x 7 = 63
2 x 8 = 16      3 x 8 = 24      4 x 8 = 32      5 x 8 = 40      6 x 8 = 48      7 x 8 = 56      8 x 8 = 64      9 x 8 = 72
2 x 9 = 18      3 x 9 = 27      4 x 9 = 36      5 x 9 = 45      6 x 9 = 54      7 x 9 = 63      8 x 9 = 72      9 x 9 = 81

i값과 j값을 수정하고 순서를 바꿔서 간단하게 해결 ! 되게 뿌듯했다😊

가위바위보 !

컴퓨터와 가위바위보를 하여서 비길 때까지 반복해 보자.

string[] choices = { "가위", "바위", "보" }; // 변수에 배열 저장
string playerChoice = "";
string computerChoice = choices[new Random().Next(0, 3)]; // 0, 1, 2 중 랜덤한 값을 가진다. 3은 xx

while (playerChoice != computerChoice) // 컴퓨터와 내가 서로 다른 걸 냈다면 계속 반복 !
{
    Console.Write("가위, 바위, 보 중 하나를 선택하세요: ");
    playerChoice = Console.ReadLine();
    
    if (playerChoice == computerChoice)
    {
        Console.WriteLine("비겼습니다!");
    }
    else if ((playerChoice == "가위" && computerChoice == "보") ||
             (playerChoice == "바위" && computerChoice == "가위") ||
             (playerChoice == "보" && computerChoice == "바위"))
    {
        Console.WriteLine("플레이어 승리!");
    }
    else
    {
        Console.WriteLine("컴퓨터 승리!");
    }
}

아쉬운 점은 최초로 컴퓨터에 할당되는 가위바위보 값이 고정이 된다는 것이다. 계속해서 랜덤한 값이 할당되어야 가위바위보라고 말할 수 있는데.. 나중에 배우지 않을까싶지만 기억해뒀다가 튜터님께 여쭤봐야겠다.

숫자 추측하여 맞히기

컴퓨터에게 1~100중 랜덤한 값을 할당하고 그것을 반복문 조건문을 통해 추측할 수 있는 프로그램을 만들어 보자.

// 아래는 강사님이 정해주신 코드
int targetNumber = new Random().Next(1, 101);
int guess = 0;
int count = 0;
Console.WriteLine("1부터 100 사이의 숫자를 맞춰보세요. ");
// 아래부턴 직접 작성한 코드
while (guess != targetNumber)
{
    Console.Write("추측한 숫자를 입력하세요: ");
    guess = int.Parse(Console.ReadLine());
    count++;

    if (guess > targetNumber)
    {
        Console.WriteLine("정답 보다 큰 숫자를 입력하였습니다.");
    }
    else if (guess < targetNumber)
    {
        Console.WriteLine("정답 보다 작은 숫자를 입력하였습니다.");
    }
    else
    {
        Console.WriteLine("정답입니다!");
        Console.WriteLine("입력한 횟수: " + count);
    }
}
// 출력값
1부터 100 사이의 숫자를 맞춰보세요.
추측한 숫자를 입력하세요: 50
정답 보다 큰 숫자를 입력하였습니다.
추측한 숫자를 입력하세요: 25
정답 보다 큰 숫자를 입력하였습니다.
추측한 숫자를 입력하세요: 15
정답 보다 작은 숫자를 입력하였습니다.
추측한 숫자를 입력하세요: 20
정답 보다 큰 숫자를 입력하였습니다.
추측한 숫자를 입력하세요: 18
정답 보다 큰 숫자를 입력하였습니다.
추측한 숫자를 입력하세요: 17
정답입니다!
입력한 횟수: 6

공부한 내용을 떠올리며 그리 어렵지 않게 작성할 수 있었다.

🤸🏻‍Feedback

계속해서 말하고 있지만 사전캠프에서 배웠던 내용들의 복습에 추가적으로 강사님의 기본적인 개념과 원리 설명, 개발에서 어떻게 쓰이는지 등의 이야기들을 들을 수 있어서 더 성장하는 기분이 든다. TIL 작성에 시간을 많이 투자하는 편인데 이렇게 학습한 내용을 복습 겸 작성하니 머리속에 잘들어가는 느낌이다 !

0개의 댓글