230814 내일배움캠프 6일차

Minsang Kim·2023년 8월 14일
0

TIL

목록 보기
6/41

주말 지나 다시 평일이다. 그치만 내일도 쉬는 날이라는 엄청난 사실. 오늘부터는 새로운 조가 시작됐다. C# 문법에 대해 3주동안 다룰 예정이다. 간바레.


파이썬 연습

오늘 푼 문제는 " 경주로 건설 "

최소 거리를 찾는 문제라 deque를 사용한 BFS 방식을 생각하고 풀었다. 스무스하게 풀고 테스트케이스도 통과하길래 결과는... 마지막 1개가 오답이 나왔다. 왜 그런가 찾아보니 방향성에 따른 최솟값이 바뀔 수 있다는 것. 그에 대한 해답으로 3차원 리스트로 바꿔 해결하고자 했지만, 이번엔 다른 케이스에서 시간초과 판정이 나왔다. 다른 알고리즘으로 바꿔볼까 어떡할까 고민하다가 질문 게시판을 찾아봤는데 해답은 heapq 를 사용하는 것이였다. 보고 heapq로 바꿔보니 시간초과가 해결되는 것을 확인 할 수 있었다.

deque 보다 heapq 가 빠르다 !

C# 문법

C# 문법에 대해 다시 다져보는 시간을 가졌다. 역시 처음엔 변수형과 연산자, 반복문, 배열, 메소드 이런거 배우는게 국룰. 콘솔창은 다뤄본 적이 없어서 콘솔관련 코드에 집중해 공부했다. 다음은 콘솔에서 만든 틱택토 게임이다.

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] board = new char[9] { 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ', 'ㅁ' };
            int player = 1;
            int pick;

            void PrintBoard()
            {
                Console.WriteLine("######################################");

                for (int i = 0; i < 9; i++)
                {
                    Console.Write(board[i] + "\t");

                    if (i % 3 == 2)
                    {
                        Console.WriteLine();
                        Console.WriteLine();
                    } 
                }
                Console.WriteLine("######################################");
            }

            bool CheckGameOver()
            {
                if (
                    (board[0] == board[1] && board[1] == board[2] && board[2] != 'ㅁ') ||
                    (board[3] == board[4] && board[4] == board[5] && board[5] != 'ㅁ') ||
                    (board[6] == board[7] && board[7] == board[8] && board[8] != 'ㅁ') ||
                    (board[0] == board[3] && board[3] == board[6] && board[6] != 'ㅁ') ||
                    (board[1] == board[4] && board[4] == board[7] && board[7] != 'ㅁ') ||
                    (board[2] == board[5] && board[5] == board[8] && board[8] != 'ㅁ') ||
                    (board[0] == board[4] && board[4] == board[8] && board[8] != 'ㅁ') ||
                    (board[2] == board[4] && board[4] == board[6] && board[6] != 'ㅁ')
                    )
                {
                    return true;
                }

                return false;
            }

            Console.WriteLine("Welcome to Tik-Tak-Toe !");

            for (int i = 0; i < 9; i++)
            {
                Console.WriteLine($"{player}번 플레이어 차례, 숫자를 입력해주세요 (1~9)");
                PrintBoard();

                while (true)
                {
                    pick = int.Parse(Console.ReadLine());

                    if (board[pick - 1] != 'ㅁ')
                    {
                        Console.WriteLine("이미 사용되었습니다. 다시 골라주세요.");
                    }
                    else if (!(1 <= pick && pick <= 9))
                    {
                        Console.WriteLine("올바르지 않은 숫자입니다.. 다시 골라주세요.");
                    }
                    else
                        break;                        
                }

                board[pick - 1] = player == 1 ? 'X' : 'O';

                if (CheckGameOver())
                {
                    PrintBoard();
                    Console.WriteLine($"{player}번 플레이어 승리 !");
                    break;
                }
                else if (i == 8)
                {
                    PrintBoard();
                    Console.WriteLine("무승부 !");
                }

                player = player == 1 ? 2 : 1;
            }
            
        }
    }
}

콘솔에서 실행하니 뭔가 옛날 향수가 느껴지는걸. 콘솔도 나름 맛있다 ..!

세줄 요약

  • 파이썬 꾸준히 풀자
  • 콘솔창은 클래식
  • 내일도 쉰다
profile
게임만 하다가 개발자로

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

좋은 정보 감사합니다

답글 달기