문제 설명
두 점 A(x1, y1)와 B(x2, y2)로 구성된 선분의 방향을 구하는 문제입니다. 점 A와 B의 좌표가 주어졌을 때, 선분의 방향이 상하, 좌우 또는 대각선으로 향하고 있는지를 판별하는 함수를 작성해야 합니다.
입력 데이터는 A와 B의 좌표로 구성된 정수 쌍이 주어지며, 출력 데이터는 “상”, “하”, “좌”, “우”, “대각선”, “같음” 중 하나로 이루어집니다.
입력 예시
(1, 1), (2, 2)
출력 예시
대각선
문제 분석
문제를 해결하기 위해서는 두 점(A, B)의 좌표 차이를 계산하여 선분의 방향을 판단해야 합니다. 판단 기준은 다음과 같습니다.
y2 > y1
이면 “상”이다.y2 < y1
이면 “하”이다.x2 > x1
이면 “우”이다.x2 < x1
이면 “좌”이다.x2 == x1 && y2 == y1
이면 “같음”이다.- 그 외의 경우: “대각선”으로 판단한다.
알고리즘 설계
알고리즘의 흐름은 다음과 같습니다.
- 입력으로 A와 B의 좌표를 받아온다.
- A와 B의 x, y 좌표 값을 비교한다.
- 조건에 맞춰 방향을 결정한다.
- 결과를 반환한다.
C# 코드 구현
public class Program
{
public static void Main(string[] args)
{
var result = GetLineDirection(1, 1, 2, 2);
Console.WriteLine(result); // 대각선
}
public static string GetLineDirection(int x1, int y1, int x2, int y2)
{
if (x1 == x2 && y1 == y2)
{
return "같음";
}
else if (y2 > y1 && x2 > x1)
{
return "대각선";
}
else if (y2 > y1)
{
return "상";
}
else if (y2 < y1)
{
return "하";
}
else if (x2 > x1)
{
return "우";
}
else if (x2 < x1)
{
return "좌";
}
else
{
return "대각선";
}
}
}
코드 설명
위의 코드는 두 점 A(x1, y1)와 B(x2, y2)의 좌표를 입력받아 선분의 방향을 결정하는 GetLineDirection
함수를 포함합니다.
Main
메소드에서 샘플 좌표를 바탕으로 함수를 호출하고 결과를 출력합니다. 각 조건문은 선분의 방향을 판단하고 그에 맞는 문자열을 반환합니다.
시간 복잡도 분석
이 알고리즘은 입력된 두 점에 대해 단순 비교 연산만 수행하므로, 시간 복잡도는 O(1)
입니다. 즉, 입력 데이터의 크기에 관계없이 일정한 시간이 소요됩니다.
테스트 케이스
다양한 테스트 케이스를 통해 알고리즘의 정확성을 검증합니다.
// Test cases
Console.WriteLine(GetLineDirection(1, 1, 1, 1)); // 같음
Console.WriteLine(GetLineDirection(1, 1, 2, 2)); // 대각선
Console.WriteLine(GetLineDirection(1, 1, 1, 2)); // 상
Console.WriteLine(GetLineDirection(1, 2, 1, 1)); // 하
Console.WriteLine(GetLineDirection(1, 1, 2, 1)); // 우
Console.WriteLine(GetLineDirection(2, 1, 1, 1)); // 좌
결론
이 문제를 통해 두 점의 좌표를 바탕으로 선분의 방향을 판단하는 간단하지만 유용한 알고리즘을 배웠습니다.
C#의 기능을 활용하여 간단한 수학적 연산을 통해 문제를 해결할 수 있는 방법을 익힐 수 있었습니다.
다양한 각도에서 이 문제를 접근하고 여러 테스트 케이스를 통해 알고리즘의 정확성을 검증하는 것이 중요합니다.
여러분도 이 알고리즘을 바탕으로 자신의 문제를 해결할 수 있는 능력을 키워보세요!