코딩 테스트는 요즘 많은 기업에서 필수적으로 진행하는 과정입니다. 특히 자바스크립트는 웹 개발에서 많이 사용되는 프로그래밍 언어로, 기하학적 문제를 통해 알고리즘에 대한 이해도를 높이는 데 큰 도움이 됩니다. 이번 글에서는 자바스크립트로 해결할 수 있는 기하학적 알고리즘 문제를 소개하고, 그 풀이 과정을 자세히 설명하겠습니다.
문제 설명
다음은 직사각형이 주어진 경우, 두 개의 점이 이 직사각형 내부에 있는지를 판단하는 문제입니다.
문제: 직사각형 내부 점 판별하기
주어진 직사각형의 좌측 하단 꼭지점의 좌표는 (x1, y1)이고, 우측 상단 꼭지점의 좌표는 (x2, y2)입니다. 또한 두 개의 점 A(xA, yA)와 B(xB, yB)가 있을 때, 이 점들이 직사각형 내부에 있는지를 판별하는 함수를 작성하세요.
입력
- 직사각형의 좌측 하단 꼭지점: (x1, y1)
- 직사각형의 우측 상단 꼭지점: (x2, y2)
- 점 A: (xA, yA)
- 점 B: (xB, yB)
출력
각 점이 직사각형 내부에 있는 경우 true를, 아닌 경우 false를 반환하는 함수를 작성하세요. 두 점 모두 내부에 있을 경우 true, 그 외의 경우 false를 반환합니다.
풀이 과정
이제 이 문제를 해결하는 방법을 단계별로 알아보겠습니다.
1단계: 문제 이해하기
우리는 주어진 직사각형의 꼭지점 좌표를 가지고 있고, 각 점의 좌표를 확인해야 합니다. 직사각형 내부의 조건은 다음과 같습니다:
- x1 < xA < x2
- y1 < yA < y2
- x1 < xB < x2
- y1 < yB < y2
위 조건을 모두 만족해야 각 점은 직사각형 내부에 존재해야 합니다.
2단계: 함수 작성하기
다음은 이를 바탕으로 작성한 자바스크립트 코드입니다.
function isPointInsideRectangle(x1, y1, x2, y2, xA, yA, xB, yB) {
const isAInside = (x1 < xA && xA < x2) && (y1 < yA && yA < y2);
const isBInside = (x1 < xB && xB < x2) && (y1 < yB && yB < y2);
return isAInside && isBInside;
}
// 테스트
const result = isPointInsideRectangle(0, 0, 10, 10, 5, 5, 5, 5); // true
console.log(result);
3단계: 테스트 및 검증
이제 함수를 테스트해봅시다. 우리는 직사각형의 좌측 하단 꼭지점이 (0,0)이고 우측 상단 꼭지점이 (10,10)인 경우, (5,5)라는 점이 내부에 있는지 확인했습니다.
위의 예시에서는 두 점이 동일한 (5,5)이므로 함수는 true를 반환합니다. 그러나 한 점이 직사각형 외부에 있을 경우 false를 반환해야 합니다.
4단계: 다양한 케이스 확인하기
우리는 여러 가지 케이스를 통해 함수를 검증할 수 있습니다. 다음은 추가적인 테스트 예시입니다.
// 케이스 1: 두 점 모두 내부
console.log(isPointInsideRectangle(0, 0, 10, 10, 1, 1, 2, 2)); // true
// 케이스 2: 하나의 점만 내부
console.log(isPointInsideRectangle(0, 0, 10, 10, 1, 1, 11, 11)); // false
// 케이스 3: 두 점 모두 외부
console.log(isPointInsideRectangle(0, 0, 10, 10, -1, -1, 11, 11)); // false
// 케이스 4: 직사각형의 경계에 위치
console.log(isPointInsideRectangle(0, 0, 10, 10, 0, 5, 5, 10)); // false
마무리
이제 우리는 자바스크립트를 사용하여 주어진 직사각형 내부에 점들이 있는지를 판별하는 함수를 완성했습니다. 이와 같은 기하 문제는 알고리즘적 사고를 기르는 데 큰 도움이 되며, 코딩 테스트에서 빈번하게 출제되는 유형이기도 합니다.
이 글을 통해 기하 문제의 기본적인 이해와 적용 방법을 익히셨기를 바랍니다. 앞으로도 다양한 알고리즘 문제에 도전해 보시기 바랍니다!