점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
function solution(dots) {
const slopeArr = [];
for(let i = 0 ; i < dots.length ; i ++) {
for(let j = i+1 ; j < dots.length ; j ++) {
const slope = (dots[i][1]-dots[j][1]) / (dots[i][0]-dots[j][0]);
if(slopeArr.includes(slope)) return 1;
slopeArr.push(slope);
}
}
return 0
}
=> 직선이 평행하다는 것은 두 직선의 기울기가 같다는 것.
()
기울기를 계산해 배열에 넣고 그 배열에 다음 계산한 기울기가 존재하면 두 기울기가 같아 평행이 되니 1을 반환하고 없으면 평행하지 않으므로 0 반환. 테스트 실패!!!
function solution(dots) {
const [a,b,c,d] = dots;
let result = 0;
const s1 = (a[1]-b[1]) / (a[0]-b[0]);
const s2 = (c[1]-d[1]) / (c[0]-d[0]);
if(s1 === s2) result = 1;
const s3 = (a[1]-c[1]) / (a[0]-c[0]);
const s4 = (b[1]-d[1]) / (b[0]-d[0]);
if(s3 === s4) result = 1;
const s5 = (a[1]-d[1]) / (a[0]-d[0]);
const s6 = (b[1]-c[1]) / (b[0]-c[0]);
if(s5 === s6) result = 1;
return result;
}
=> 3가지 경우 확인, 통과!!
function solution(dots) {
if (calculateSlope(dots[0], dots[1]) === calculateSlope(dots[2], dots[3]))
return 1;
if (calculateSlope(dots[0], dots[2]) === calculateSlope(dots[1], dots[3]))
return 1;
if (calculateSlope(dots[0], dots[3]) === calculateSlope(dots[1], dots[2]))
return 1;
return 0;
}
function calculateSlope(arr1, arr2) {
return (arr2[1] - arr1[1]) / (arr2[0] - arr1[0]);
}
=> 반복되는 계산을 함수로 만들어 사용했다. const [a,b,c,d] = dots; 구조분해 할당을 해주면 더 간결한 코드를 얻을 수 있을 것 같다.
function solution(dots) {
const [a,b,c,d] = dots
if (calculateSlope(a,b) === calculateSlope(c,d))
return 1;
if (calculateSlope(a,c) === calculateSlope(b,d))
return 1;
if (calculateSlope(a,d) === calculateSlope(b,c))
return 1;
return 0;
}
function calculateSlope(arr1, arr2) {
return (arr2[1] - arr1[1]) / (arr2[0] - arr1[0]);
}