▶구조분해할당을 이용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
점 네 개의 좌표를 담은 이차원 배열 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축과 평행한 경우는 주어지지 않습니다.
입출력 예 & 설명
입출력 예 #1
- 점 [1, 4], [3, 8]을 잇고 [9, 2], [11, 6]를 이으면 두 선분은 평행합니다.
입출력 예 #2
- 점을 어떻게 연결해도 평행하지 앉습니다.
나의 풀이
이번 문제를 풀기 위해서는 수학 기초 개념인 기울기를 구하는 공식을 알아야 합니다.
두 직선의 평행하기 위한 조건은 기울기가 평행하고, y절편이 달라야 합니다.
그리고 지나가는 두 점의 위치가 (X1, Y1), (X2, Y2)라는 것을 알고 있다면 기울기를 구하는 공식은 다음과 같습니다.
기울기 = y2 - y1 / x2 - x1 (y의 차이 / x의 차이)로 계산하여 위 식을 clac함수로 만들어줍니다.
그리고 저 포함해서 많은 분들이 테스트케이스 12번부터 틀렸을 것으로 예상됩니다.
그 이유는 4개의 점을 a, b, c, d로 했을 때
- a-b, a-c, a-d, b-c, b-d, c-d
위와 같이 6개의 경우의 수를 생각했을 텐데 문제를 다시 살펴보면 "주어진 네 개의 점을 두 개씩이었을 때"입니다.
이 말은 즉슨 주어진 점 a, b, c, d를 두 개씩 이어서 두 쌍을 만들었을 때 그 두 쌍의 직선이 서로 평행한 지 물어보는 것이기 때문에 a, b, c, d가 모두 들어간 두 개의 쌍을 아래와 같이 만들어야 합니다.
- [a-b, c-d], [a-c, b-d], [a-d, b-c]
출처 : https://school.programmers.co.kr/questions/44837
그래서 위와 같이 점 a, b, c, d를 모두 들어간 두 개의 쌍이 아닌 ab, bc & ad, cd처럼 중복되면 안 되는 것입니다.
참고 ❗
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 3진법 뒤집기 (JavaScript) (1) | 2024.04.27 |
---|---|
[SQL] 조건에 맞는 도서 리스트 출력하기 (ORACLE) (0) | 2024.04.21 |
[프로그래머스] 특이한 정렬(JavaScript) (1) | 2024.03.12 |
[프로그래머스] 안전지대 (JavaScript) (0) | 2024.03.11 |
[프로그래머스] 유한소수 판별하기 (JavaScript); (0) | 2024.03.09 |