개발/코딩테스트

[프로그래머스 | JavaScript] 평행

prpn97 2023. 4. 13. 21:27

<문제 설명>

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

[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 

없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

<입출력 예>

dots result
[[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])
let a = dots[0]
let b = dots[1]
let c = dots[2]
let d = dots[3]

if((a[0]-b[0])/(a[1]-b[1]) === (c[0]-d[0])/(c[1]-d[1])){
    return 1
}
else return 0
}

평행이 어떤 규칙으로 이루어졌을지를 떠올렸을 때, 

점을 연결한 선 두개의 x끼리의 차와 y끼리의 차가 동일하면 평행인 것을 확인했다.

테스트 케이스를 보면, 1,4와 3,8을 연결하고 9,2와 11,6을 연결해서

각각 x는 2, y는 4의 차이가 나는 것을 알 수 있었다. 

그런데 배열 a,b,c,d가 숫자가 랜덤하게 있다보니 규칙을 반복문으로 돌리기에 까다로워서

x를 기준으로 순서대로 먼저 정렬했고,

좌표가 음수일 경우일 수 있어 절댓값도 이용해보았지만, 

한 쪽 값이 같아도 나머지 한쪽 값이 반대로 대각선을 그리기도 했다. 

 

고민해보니, x,y값은 x끼리 y끼리 같은 것이고 x와 y는 상관이 없었다. 

그래서 둘을 한꺼번에 분수로 나타내서 비율로 계산했을 때 동일하면 평행이라고 생각해서

x1-x2 / y1-y2 와 x3-x4 / y3-y4 가 같은 값을 구했다.

같으면 평행하므로 1을 반환하고, 아니면 0을 반환했다. 

 

<코멘트>

다른 사람들 풀이를 보니 dots의 길이가 4로 정해져 있어서 

경우의 수가 많지 않으니 직접 if문을 여러번 돌려서 같은 경우를 체크하였는데,

처음으로 나름 규칙을 통해 간결하게 풀게 되어 뿌듯했다. 

728x90