본문 바로가기

프로그래머스 문제 풀이/Lv.0 정답률 낮은 문제

평행

문제 설명

점 네개의 좌표를 담은 이차원 배열 dots 가 다음과 같이 매개변수로 주어집니다.

  • [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]

주어진 네 개의 점을 두개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

dots의 길이 = 4

dots의 원소는 [x,y] 형태이며 x, y는 정수입니다.

0<= x, y <= 100

서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.

두 직선이 겹치는경우(일치하는 경우)에도 1을 return 해주세요.

임의의 두점을 이은 직선이 x축, 또는 y축과 평행한 경우는 주어지지 않습니다.

 

입출력 예

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

 

나는 각 점마다 a,b,c,d라고 생각하고 아래와 같이 만들었다.

 

function solution(dots) {
    let answer = 0;
    let x = [], y = [];
    //a,b
    x[0] = Math.abs(dots[0][0] - dots[1][0])
    y[0] = Math.abs(dots[0][1] - dots[1][1])
    //c,d
    x[1] = Math.abs(dots[2][0] - dots[3][0])
    y[1] = Math.abs(dots[2][1] - dots[3][1])
    //a,c
    x[2] = Math.abs(dots[0][0] - dots[2][0])
    y[2] = Math.abs(dots[0][1] - dots[2][1])     
    //b,d
    x[3] = Math.abs(dots[1][0] - dots[3][0])
    y[3] = Math.abs(dots[1][1] - dots[3][1])     
    //a,d
    x[4] = Math.abs(dots[0][0] - dots[3][0])
    y[4] = Math.abs(dots[0][1] - dots[3][1])     
    //b,c    
    x[5] = Math.abs(dots[1][0] - dots[2][0])
    y[5] = Math.abs(dots[1][1] - dots[2][1])     
    for(let i = 0; i < 6; i+=2){
        if((x[i]==x[i+1])&&(y[i]==y[i+1])){
            answer = 1;
        }
    }
        return answer;
}

 

테스트결과는 통과했는데, 제출했을때 테스트1, 테스트10만 통과를 못했다.

어째서인지 좀더 봐야할거같다.

일단 같은선상에 있을때도 1을 반환해주라고 해서 아래 코드를 덧붙였다.

if(answer == 0){        
        for(let i = 0; i < 4; i++){
            if(dots[i][0] == dots[i][1]){
                answer = 1;
            } else answer = 0;
        }
    }

 

그런데도 아직 통과하지 못했다.

 

 

다시 다 지우고 처음부터 생각해 봤다. 두 직선이 평행하려면 어떻게 해야하나. 그건 두 직선의 기울기가 같아야한다.

그래서 우선 기울기부터 구했다.

 

두 점의 직선 기울기 = (y2 - y1) / (x2 - x1)

 

그러고 나서 돌려보니 됐다.

function solution(dots) {
    var answer = 0;
    let x = [];
    //a,b 기울기
    x[0]=(dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]);
    //c,d 기울기
    x[1]=(dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]);
    //a,c 기울기
    x[2]=(dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]);
    //b,d 기울기
    x[3]=(dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]);
    //a,d 기울기
    x[4]=(dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]);
    //b,c 기울기
    x[5]=(dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]);
    
    for(let i = 0; i < x.length; i+=2){
        if(x[i]==x[i+1]) answer = 1;
    }
    
    return answer;
}

 

 

'프로그래머스 문제 풀이 > Lv.0 정답률 낮은 문제' 카테고리의 다른 글

배열 조각하기  (0) 2023.05.04
옹알이(1)  (0) 2023.05.04