자바스크립트 코딩테스트 강좌, 선분 방향 구하기

문제 설명

주어진 두 점 A(x1, y1)와 B(x2, y2)로 정의되는 선분 AB의 방향을 구하는 문제입니다. 방향의 결과는 다음 세 가지 중 하나여야 합니다:

  • “UP”: 선분이 위쪽 방향으로 향하는 경우
  • “DOWN”: 선분이 아래쪽 방향으로 향하는 경우
  • “HORIZONTAL”: 선분이 수평인 경우

입력 형식

입력으로 두 점 A(x1, y1)와 B(x2, y2)의 좌표가 주어집니다. 각 좌표는 정수로 주어집니다.

출력 형식

선분 AB의 방향을 나타내는 문자열을 출력합니다.

예제

입력:
A(1, 2), B(3, 5)
출력:
“UP”
입력:
A(1, 3), B(4, 2)
출력:
“DOWN”

문제 풀이 과정

1. 문제 이해하기

문제를 이해하기 위해서 두 점 A와 B가 주어졌을 때, 선분 AB가 어떤 방향으로 향하고 있는지를 파악해야 합니다. 선분의 방향은 y좌표의 차이(Δy)와 x좌표의 차이(Δx)에 따라 결정됩니다. 이 차이를 통해서 선분이 수평인지, 위쪽인지, 아래쪽인지를 판단할 수 있습니다.

2. 선분의 방향 판별 로직 구축하기

선분의 방향을 판별하는 데 필요한 기본적인 수식은 다음과 같습니다:

  • Δy = y2 – y1
  • Δx = x2 – x1

이제 세 가지 경우를 통해서 방향을 결정할 수 있습니다:

  • 만약 Δy > 0 이면, 선분은 위쪽으로 향하고 있으므로 “UP”을 반환합니다.
  • 만약 Δy < 0 이면, 선분은 아래쪽으로 향하고 있으므로 “DOWN”을 반환합니다.
  • 만약 Δy == 0 이면, 선분은 수평이므로 “HORIZONTAL”을 반환합니다.

3. 자바스크립트 구현하기

문제를 해결하는 데 필요한 자바스크립트 코드는 다음과 같습니다:


function getDirection(x1, y1, x2, y2) {
    const deltaY = y2 - y1;
    
    if (deltaY > 0) {
        return "UP";
    } else if (deltaY < 0) {
        return "DOWN";
    } else {
        return "HORIZONTAL";
    }
}

// 예제 호출
console.log(getDirection(1, 2, 3, 5)); // "UP"
console.log(getDirection(1, 3, 4, 2)); // "DOWN"
console.log(getDirection(1, 3, 4, 3)); // "HORIZONTAL"

4. 복잡도 분석

이 알고리즘의 시간복잡도는 O(1)입니다. 입력으로 주어진 두 점의 좌표를 읽고, 간단한 연산을 통해 방향을 결정하기 때문에, 고정된 시간 안에 해결하려면 최적입니다.

5. 추가 개선 사항

현재 알고리즘은 2D 평면의 두 점에 대한 방향을 계산하는 데 최적화되어 있지만, 몇 가지 개선 사항을 적용할 수 있습니다:

  • 다양한 입력을 처리하기 위해 예외 처리를 추가할 수 있습니다. 예를 들어, 입력 점이 동일한 경우를 처리해야 합니다.
  • 입력 점의 값이 숫자인지를 검증하는 로직을 추가하여 안정성을 높일 수 있습니다.

결론

이 강좌에서는 자바스크립트를 사용하여 두 점 사이의 선분 방향을 결정하는 알고리즘을 구현했습니다. 간단한 수학적 원리와 조건문을 활용하여, 문제를 효과적으로 해결할 수 있음을 보여주었습니다. 앞으로 더 많은 알고리즘 문제를 해결하면서 코딩 능력을 향상시키길 바랍니다.