평행

Haizel·2023년 4월 11일
0

🧬 알고리즘 풀이

목록 보기
8/53
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

첫 풀이

function solution(dots) {
    dots.sort((a,b) => a[0] - b[0]); //[[1,4],[3,8],[9,2],[11,6]]
    const xSide = Math.abs(dots[0][0] - dots[1][0]) === Math.abs(dots[2][0] - dots[3][0]);
    const ySide = Math.abs(dots[0][1] - dots[1][1]) === Math.abs(dots[2][1] - dots[3][1]);
    
    return (xSide && ySide) ? 1 : 0;

}

💡 코드 풀이

  1. 각 요소를 오름차순으로 나열하고
  2. 한 축과 다른 한 축의 높이 차이가 동일하다면 1을 리턴, 아니라면 0을 리턴하도록 코드를 짰다.

💡 문제점

  1. 다른 케이스들은 다 통과했는데, 테스트케이스 1번과 10번이 통과되지 않았다.
  2. 해당 케이스를 살펴보니 “두 직선이 일치하는 경우” 에도 1을 리턴하도록 되어 있다는 사실을 알게 되었다.

최종 풀이

function solution(dots) {
        let x1 = dots[0][0]
        let y1 = dots[0][1]
        let x2 = dots[1][0]
        let y2 = dots[1][1]
        let x3 = dots[2][0]
        let y3 = dots[2][1]
        let x4 = dots[3][0]
        let y4 = dots[3][1]

        if (Math.abs((x1 - x2) * (y3 - y4)) == Math.abs((y1 - y2) * (x3 - x4))) {
            return 1
        }
        if (Math.abs((x1 - x3) * (y2 - y4)) == Math.abs((y1 - y3) * (x2 - x4))) {
            return 1
        }
        if (Math.abs((x1 - x4) * (y2 - y3)) == Math.abs((y1 - y4) * (x2 - x3))) {
            return 1
        }
        return 0
    }

💡 코드 풀이

  1. 케이스를 3개로 구분하기 위해 각각의 좌표를 변수로 지정하고
  2. 높이가 아닌 기울기로 조건을 바꿔줬다.

💡 배운점

  1. 반례를 주의하자 !
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글