Javascript - 평행

이율곡·2023년 7월 23일

Programmers

목록 보기
42/44
post-thumbnail

평행

문제

점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

입출력 예

dotsresult
[[1, 4], [9, 2], [3, 8], [11, 6]]1
[[3, 5], [4, 1], [2, 4], [5, 10]]0

접근방법

이 문제의 핵심은 주어진 점들을 이용하여 만들 수 있는 두 직선의 기울기를 계산하고, 이를 바탕으로 두 직선이 평행인지 판별하는 것이다.

  1. 4개의 점을 이용하여 만들 수 있는 모든 두 직선의 조합을 찾기.
  • 이 경우, 가능한 조합은 총 3가지:
    - (0,1), (2,3) / (0,2), (1,3) / (0,3), (1,2)
  1. 각 조합에 대해 두 직선의 기울기를 계산.
  2. 계산된 두 기울기가 같은지를 확인.
  3. 모든 조합을 확인한 후에도 평행한 두 직선이 없다면 0을 반환.

풀이

function solution(dots) {
    const slope = (dot1, dot2) => (dot2[1] - dot1[1]) / (dot2[0] - dot1[0]);

    const pairs = [[0, 1, 2, 3], [0, 2, 1, 3], [0, 3, 1, 2]];

    for (let i = 0; i < pairs.length; i++) {
        const slope1 = slope(dots[pairs[i][0]], dots[pairs[i][1]]);
        const slope2 = slope(dots[pairs[i][2]], dots[pairs[i][3]]);
        
        if (slope1 === slope2) {
            return 1;
        }
    }
    return 0;
}

코드를 살펴보면 다음과 같다. 우선 직선의 기울기를 계산하는 slope 함수를 정의한다. 이 함수는 두 점의 y좌표의 차이를 두 점의 x좌표의 차이로 나눈 값을 반환한다.

그런 다음, 4개의 점을 이용하여 만들 수 있는 모든 두 직선의 조합을 pairs 배열에 저장한다.

왜 저 배열인지?

주어진 4개의 점을 두 개씩 묶어 두 직선을 만드는 방법은 총 3가지고, 숫자는 각 점의 인덱스를 나타낸다.

  • 예를 들면, [0, 1, 2, 3]은 첫 번째와 두 번째 점으로 첫 번째 직선을 만들고, 세 번째와 네 번째 점으로 두 번째 직선을 만든다는 것을 의미한다.

이후에는 pairs 배열을 순회하면서 각 조합에 대해 두 직선의 기울기를 계산하고, 이들이 같은지를 확인한다. 만약 두 기울기가 같으면 즉시 1을 반환하여 두 직선이 평행함을 표시하고, 아닐 경우 0을 반환한다.


정리하기

이 문제는 수학적 지식을 활용하여 두 직선의 기울기를 계산하고, 이를 바탕으로 두 직선이 평행인지 판별하는 문제다. 최근 10문제 전부 다 너무 어려웠고, 많은 고민과 다른 사람들이 풀이를 참고하며 지식을 쌓을 수 있었다. Lv.0 문제가 한 문제 남았으니, 집중해서 해결하고 싶다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글