문제 설명
가상의 게임에서는 적 캐릭터와 플레이어 캐릭터가 있습니다. 적 캐릭터는 (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#을 이용한 코딩 테스트 문제 해결은 향후 실제 게임 개발 프로젝트에 도움이 될 것입니다. 우리는 입력된 위치에 따라 적이 플레이어에게 도달하도록 최적의 이동 경로를 계산할 수 있음을 알 수 있습니다.