본문 바로가기
개발/C#

유니티 C# 단어 검색 기능 함수 간단 구현 2d 배열 사용

by SPNK 2024. 2. 14.
반응형
  • 코드 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WordSearch : MonoBehaviour
{
    // 단어 찾기를 위한 2D 배열
    char[,] wordGrid = {
        { '가', '나', '다', '라', '마' },
        { '바', '사', '아', '자', '차' },
        { '카', '타', '파', '하', '거' },
        { '너', '더', '러', '머', '버' },
        { '서', '어', '저', '처', '커' }
    };

    // 주어진 단어를 찾는 함수
    bool FindWord(string word)
    {
        int rows = wordGrid.GetLength(0);
        int cols = wordGrid.GetLength(1);

        // 모든 셀을 순회하면서 단어 찾기 시도
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                // 단어의 첫 글자와 일치하는 셀을 찾으면 시작
                if (wordGrid[i, j] == word[0])
                {
                    // 각 방향에 대해 검사
                    for (int direction = 0; direction < 8; direction++)
                    {
                        int rowChange = GetRowChange(direction);
                        int colChange = GetColChange(direction);

                        // 단어 길이만큼 순회하면서 검사
                        int k;
                        for (k = 1; k < word.Length; k++)
                        {
                            int newRow = i + k * rowChange;
                            int newCol = j + k * colChange;

                            // 배열을 벗어나면 검사 중지
                            if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= cols)
                                break;

                            // 현재 위치의 문자가 단어와 일치하지 않으면 검사 중지
                            if (wordGrid[newRow, newCol] != word[k])
                                break;
                        }

                        // 단어가 찾아졌다면 true 반환
                        if (k == word.Length)
                            return true;
                    }
                }
            }
        }

        // 단어를 찾지 못한 경우 false 반환
        return false;
    }

    // 주어진 방향에 따른 행 변화량 반환
    int GetRowChange(int direction)
    {
        switch (direction)
        {
            case 0: return -1; // 위
            case 1: return -1; // 오른쪽 위 대각선
            case 2: return 0;  // 오른쪽
            case 3: return 1;  // 오른쪽 아래 대각선
            case 4: return 1;  // 아래
            case 5: return 1;  // 왼쪽 아래 대각선
            case 6: return 0;  // 왼쪽
            case 7: return -1; // 왼쪽 위 대각선
            default: return 0;
        }
    }

    // 주어진 방향에 따른 열 변화량 반환
    int GetColChange(int direction)
    {
        switch (direction)
        {
            case 0: return 0;  // 위
            case 1: return 1;  // 오른쪽 위 대각선
            case 2: return 1;  // 오른쪽
            case 3: return 1;  // 오른쪽 아래 대각선
            case 4: return 0;  // 아래
            case 5: return -1; // 왼쪽 아래 대각선
            case 6: return -1; // 왼쪽
            case 7: return -1; // 왼쪽 위 대각선
            default: return 0;
        }
    }

    void Start()
    {
        // 테스트를 위한 단어 찾기
        string testWord = "가자"; // 테스트할 단어
        bool wordFound = FindWord(testWord);

        // 결과 출력
        if (wordFound)
        {
            Debug.Log(testWord + " 단어를 찾았습니다!");
        }
        else
        {
            Debug.Log(testWord + " 단어를 찾지 못했습니다.");
        }
    }
}
반응형

댓글