모든 일상

C# 백준 7562번 문제 나이트의 이동 본문

코딩 공부/C#

C# 백준 7562번 문제 나이트의 이동

통통푸린 2022. 8. 5. 17:32
728x90
반응형

using System;
using System.Collections;
using System.Collections.Generic;

namespace ConsoleApp3
{
    public class Program
    {
        static void Main(string[] args)
        {
            int test_case = int.Parse(Console.ReadLine());
            int[] result= new int[test_case];
            int[] dx = new int[8] {2, 2, 1, 1, -2, -2, -1, -1}; // 나이트 움직임 -> ((x 축 2칸 - y 축 1칸) or (x 축 1칸 + y축 2칸))
            int[] dy = new int[8] {1, -1, 2, -2, 1, -1, 2, -2};
            for (int i = 0; i < test_case; i++)
            {
                int size = int.Parse(Console.ReadLine());

                string[] start_data = Console.ReadLine().Split();
                string[] end_data   = Console.ReadLine().Split();
                Queue<(int, int, int)> q_data = new Queue<(int, int, int)> (); // x축, y축, 이동횟수
                int[,] visit = new int[size, size]; // 방분표시

                q_data.Enqueue((int.Parse(start_data[0]), int.Parse(start_data[1]), 0));
                visit[int.Parse(start_data[0]), int.Parse(start_data[1])] = 1;

                while(q_data.Count != 0)
                {
                    var buff = q_data.Dequeue();
                    int check_x = buff.Item1;
                    int check_y = buff.Item2;
                    int c = buff.Item3;

                    if (check_x == int.Parse(end_data[0]) && check_y == int.Parse(end_data[1]))
                    {
                        result[i] = c;
                        break;
                    }

                    for (int j = 0; j < 8; j++)
                    {
                        int x = check_x + dx[j];
                        int y = check_y + dy[j];

                        if (x < 0 || x >= size || y < 0 || y >= size) continue;
                        if (visit[x,y] ==1 ) continue;

                        visit[x,y] = 1;
                        q_data.Enqueue((x, y, c + 1));
                    }
                }
            }
            for(int i = 0; i<test_case; i++)
            {
                Console.WriteLine(result[i]);
            }
        }
    }
}

728x90
반응형