연습장

60. 평행 본문

프로그래머스/0단계

60. 평행

js0616 2023. 8. 20. 16:19

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

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

 

 


1. 기울기를 구하는 함수를 만든다.

 

2. 4개의 점 중에서 2개를 선택하여 기울기를 구한다.

 

3. 나머지 2개의 점의 기울기를 구한다.

 

4. 두 기울기의 절대값이 같으면 평행이다.

 

 

 

1. 기울기는 기울어진 정도, x 변화량에 따른 y 변화량이다. 

 

식으로 쉽게 표현해보면 

 

 

우리가 입력받는 값은 

2차원 배열인데 

 

각각은 점의 x와 y 좌표가 들어있는 총 4개의 점이라고 볼 수 있다. 

dots = [ [x1,y1] , [x2,y2], [x3,y3], [x4,y4] ]

 

따라서 slope 함수는 다음과 같이 점2개 [x1,y1] , [x2,y2] 를 입력 받는다고 생각하고

 

위의 식대로 (y2 - y1 ) / ( x2 - x1 ) 을 반환 하도록 하였다.

 

 

그런데, 

 

x1 == x2 일경우 분모가 0 이되는 zerodivison 이 되기 때문에 기울기가 무한대로 가는데 

 

문제 조건의 범위가 0 <= x,y <= 100 이며 정수이기때문에

 

사실 가장 큰기울기라 해도 [0,0] , [1,100] 의 두 점의 기울기인 100이 최대이며

 

그 이상 나올 수 있는 값은 사실 무한대이며 이를 표현하기 위해

 

문제에서 나올 수 있는 최대 기울기 100보다  10배 큰  1000을 리턴하도록 해주었다.

 

 

 

2. 위에서 만든 slope 기울기함수를 이용하여 

 

0번과 1번 점의 기울기 == 2번과 3번점의 기울기가 같은지

or 

0번과 2번점의 기울기 == 1번과 3번점의 기울기 가 같은지 

 

2가지 경우를 비교하여 

 

같으면 평행이므로 1을 리턴

다르면 평행이 아니므로  0 을 리턴 하도록 하였다. 

 

// 평행 = 기울기가 같다
// 기울기 식 = ay/ax
const slope = (arr1 , arr2) => {
    if((arr2[0]-arr1[0]) ==0){
        return 1000
    }
    return (arr2[1] - arr1[1])/ (arr2[0]-arr1[0])
}

function solution(dots) {
    var answer = 0;
   
    if (Math.abs(slope(dots[0],dots[1])) == Math.abs(slope(dots[2],dots[3]))
        || Math.abs(slope(dots[0],dots[2])) == Math.abs(slope(dots[1],dots[3]))){
              return 1
              }
    else {
        return 0
    }
}

 

 

'프로그래머스 > 0단계' 카테고리의 다른 글

62. 안전지대  (0) 2023.08.20
61. 겹치는 선분의 길이  (0) 2023.08.20
59. 이차원 배열 대각선 순회하기  (0) 2023.08.20
58. 최빈값 구하기  (0) 2023.08.19
57. 분수의 덧셈  (0) 2023.08.19