C# 코딩테스트 강좌, 게임 개발하기

문제 설명

가상의 게임에서는 적 캐릭터와 플레이어 캐릭터가 있습니다. 적 캐릭터는 (x, y) 좌표에서 출발하여 플레이어 캐릭터에게 접근해야 합니다. 여기서, 적 캐릭터는 매 턴마다 플레이어의 위치로 가장 가까이 이동할 수 있는 최적의 경로를 찾아야 합니다. 이 문제를 해결하기 위해, 우리는 적이 플레이어에게 다가가기 위한 최적 경로를 계산해야 합니다.

문제 정의

다음의 입력을 받습니다:

  • 적의 초기 위치 (X1, Y1)
  • 플레이어의 위치 (X2, Y2)

출력은 적이 플레이어에게 도달하는 최적의 경로를 (모든 중간 좌표 포함) 반환해야 합니다.

입력 예시

    0 0
    3 4
    

출력 예시

    (0,0) → (1,1) → (2,2) → (3,3) → (3,4)
    

해결 전략

이 문제는 기초적인 거리 계산과 경로 추적을 포함합니다. 우리는 각 턴에서 적의 위치를 업데이트하여 플레이어에게 접근할 수 있는 다음 위치를 계산해야 합니다. 이를 위해 유클리드 거리 공식을 사용하여 두 점 간의 거리와 방향을 계산하고, 매 턴마다 적이 취할 수 있는 최적의 경로를 찾습니다.

1. 거리 계산

    dist(X1, Y1, X2, Y2) = sqrt((X2 - X1)² + (Y2 - Y1)²)
    

2. 이동 로직 구현

우리는 적이 매 턴마다 플레이어에게 접근하도록 함으로써, X와 Y 좌표를 조정합니다.

3. 경로 저장

각 이동 후의 좌표를 리스트에 저장하여 최종적으로 경로를 출력합니다.

C# 구현 예시

    using System;
    using System.Collections.Generic;

    class Program
    {
        static void Main(string[] args)
        {
            // 적의 초기 위치
            var enemyPosition = (X: 0, Y: 0);
            // 플레이어의 위치
            var playerPosition = (X: 3, Y: 4);
            var path = new List<(int, int)>();

            while (enemyPosition != playerPosition)
            {
                path.Add(enemyPosition);
                enemyPosition = MoveTowardsPlayer(enemyPosition, playerPosition);
            }
            path.Add(playerPosition);

            Console.WriteLine("Path taken:");
            foreach (var pos in path)
                Console.WriteLine($"({pos.Item1}, {pos.Item2})");
        }

        static (int, int) MoveTowardsPlayer((int X, int Y) enemy, (int X, int Y) player)
        {
            int newX = enemy.X + (player.X > enemy.X ? 1 : (player.X < enemy.X ? -1 : 0));
            int newY = enemy.Y + (player.Y > enemy.Y ? 1 : (player.Y < enemy.Y ? -1 : 0));
            return (newX, newY);
        }
    }
    

결론

이 문제를 통해 게임 개발에 있어 경로finding과 객체 간의 상호작용을 이해할 수 있습니다. C#을 이용한 코딩 테스트 문제 해결은 향후 실제 게임 개발 프로젝트에 도움이 될 것입니다. 우리는 입력된 위치에 따라 적이 플레이어에게 도달하도록 최적의 이동 경로를 계산할 수 있음을 알 수 있습니다.