오늘 학습 키워드

페어 코딩

오늘 학습 한 내용을 나만의 언어로 정리하기

String에 Contains가 있다.

공식문서

같은 조 분께서

bool hasChr = false; 
for (int i = 0; i < secretWord.Length; i++)
{
    if (secretWord[i] == guessChr)
    {
        hasChr = true; // 가지고 있음
        guessWord[i] = guessChr;
    }
}

이 부분을 String.Contains 를 활용해서 진행하심.

if(secretWord.Contains(guessChr)){
...
}

이런식으로

야구게임 만들기

예외처리하는데 시간 많이쓴듯

namespace yagoogame
{
    internal class Program
    {
        const int yagooNumbers = 3; // 야구게임에서 사용되는 숫자의 개수
 
        static void Main(string[] args)
        {
            Random random = new Random();
 
            int[] targetNumber = new int[yagooNumbers];
            int[] userGuess = new int[yagooNumbers];
 
            int strikes = 0;
            int balls = 0;
            bool guessedCorrectly = false;
 
            int attempts = 0;
 
            for(int i = 0; i < yagooNumbers; i++)
            {
                int randomNumber = random.Next(1, 10);
                int idx = Array.IndexOf(targetNumber, randomNumber);
                if(idx != -1)
                {
                    i--;
                    continue;
                }
                else
                {
                    targetNumber[i] = randomNumber;
                }
            }
 
            while(!guessedCorrectly)
            {
                // 초기화
                userGuess = new int[yagooNumbers];
                strikes = 0;
                balls = 0;
 
                // 입력 처리
                Console.Write("Enter your guess (3 digits): ");
                string? s = Console.ReadLine();
                if(String.IsNullOrEmpty(s)) { continue; }
                else if(s.Length > yagooNumbers) { continue; }
                bool isNotNumber = false;
                bool isDuplicated = false;
                for (int i = 0; i < yagooNumbers; i++)
                {
                    // 숫자 확인
                    if (!Char.IsNumber(s[i]))
                    {
                        isNotNumber = true;
                        break;
                    }
                    // 중복 확인
                    if (s.IndexOf(s[i]) != s.LastIndexOf(s[i]))
                    {
                        // Console.WriteLine("Duplicated");
                        isDuplicated = true;
                        break;
                    }
                }
                if (isNotNumber || isDuplicated) { continue; }
 
                // 입력에 문제가 없으면 시도 횟수 증가
                attempts++;
 
                // String을 int[3] 배열로
                for (int i = 0; i < yagooNumbers; i++)
                {
                    userGuess[i] = s[i] - '0';
                }
 
                // ball, strike 검사
                for (int i = 0; i < yagooNumbers; i++)
                {
                    int idx = Array.IndexOf(targetNumber, userGuess[i]);
                    if(idx == -1) { continue; } // targetNumber에서 찾을 수 없음 = 없는 숫자
                    else if(idx == i){ strikes++; } // targetNumber에서 찾았는데 그게 i랑 같음 = 스트라이크
                    else { balls++; } // targetNumber에서 찾았는데 i는 아님 = 볼
                }
 
                if (strikes == yagooNumbers) {guessedCorrectly = true;}
 
                Console.WriteLine($"{strikes} Strike(s), {balls} Ball(s)");
 
                if (guessedCorrectly) break;
            }
            Console.WriteLine($"Congratulations! You've guessed the number in {attempts} attempts.");
        }
    }
}
 

이번에 IndexOf, LastIndexOf를 많이 쓴듯
특히 중복처리 할때 IndexOf로 나온 첫 번째 위치와 LastIndexOf로 나온 마지막 위치가 다르면 중복으로 판단하는건 잘 생각한 것 같음

학습하며 겪었던 문제점 & 에러

  • 문제&에러에 대한 정의

야구게임 답이 345 (예시) 일때, 333으로 하면 1 스트라이크 2 볼로 나옴.

  • 내가 한 시도 / 해결방법

입력에 대한 중복 처리도 진행함

  • 이 문제&에러를 다시 만나게 되었다면?

주어진 조건과 사용자 입력을 잘 파악해야겠다. 여기서는 주어진 조건이 애초에 컴퓨터가 >중복없는< 3자리 숫자를 뽑는거였는데 사용자 입력으로는 중복을 막지 않아서 이런 일이 생김.

내일 학습 할 것은 무엇인지

게임 내 상호작용 분석