thumbnail

[lv.0] 평행 | 프로그래머스

[lv.0] 평행 | 프로그래머스

📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)

✏️ (lv.0) : 평행

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

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하라.


  • 0 <= dots의 원소(정수) <= 100
  • dots.length = 4, dots의 원소 길이 = 2
  • x, y가 겹치는 경우는 없다.
  • 두 직선이 겹치는 경우에도 1을 return한다.
  • x축, y축과 평행한 경우는 없다.

주어진 좌표중 두 쌍의 기울기가 일치할 경우 평행하므로 기울기를 이용해 solution을 작성한다.

  • 두 점의 좌표를 알고 있으므로 기울기 m = y2-y1 /x2-x1 이다.

  • 중복을 피하기 위해 1/2로 쌍을 이룰 경우 3/4를, 1/3으로 쌍을 이룰 경우 2/4를, 1/4로 쌍을 이룰 경우 2/3을 비교한다.

          
1 // 최초로 제출한 solution
2 function solution(dots) {
3 let m = [0,0,0];
4 let dotsCase = [
5 (dots[3][1] - dots[2][1]) / (dots[3][0] - dots[2][0]),
6 (dots[3][1] - dots[1][1]) / (dots[3][0] - dots[1][0]),
7 (dots[2][1] - dots[1][1]) / (dots[2][0] - dots[1][0]),
8 ];
9
10 for (i=1; i<4; i++) {
11 m[i-1] = (dots[i][1] - dots[0][1]) / (dots[i][0] - dots[0][0]);
12 }
13
14 if (m[0] == dotsCase[0]) {
15 return 1;
16 } else if (m[1] == dotsCase[1]) {
17 return 1;
18 } else if (m[2] == dotsCase[2]) {
19 return 1;
20 } else {
21 return 0;
22 }
23 }
24
25 // 개선된 solution
26 function otherSolution(dots) {
27 const leans = []
28
29 // 이중배열의 각 원소를 dotA, dotB로 나누어 관리하면 더 편하다.
30 for(let i = 0; i < dots.length; i++) {
31 const dotA = dots[i];
32 for(let j = i + 1; j < dots.length; j++) {
33 const dotB = dots[j]
34 const lean = (dotB[1] - dotA[1]) / (dotB[0] - dotA[0])
35
36 if(leans.includes(lean)) return 1
37 else leans.push(lean)
38 }
39 }
40
41 return 0;
42 }
# 프로그래머스
# JS
# javascript
# 코딩테스트
# 알고리즘
# 이중배열

💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!

👨‍💻 관련 포스트