<문제 설명>
점 네 개의 좌표를 담은 이차원 배열 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문을 여러번 돌려서 같은 경우를 체크하였는데,
처음으로 나름 규칙을 통해 간결하게 풀게 되어 뿌듯했다.
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] 등수 매기기 (0) | 2023.04.15 |
---|---|
[프로그래머스 | JavaScript] 겹치는 선분의 길이 (0) | 2023.04.14 |
[프로그래머스 | JavaScript] 저주의 숫자 3 (0) | 2023.04.12 |
[프로그래머스 | JavaScript] 치킨 쿠폰 (0) | 2023.04.11 |
[프로그래머스 | JavaScript] 공던지기 (0) | 2023.04.10 |