반응형
문제 설명
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
dots의 길이 = 4dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
0 ≤ x, y ≤ 100
서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
입출력 예 설명
입출력 예 #1
점 [1, 4], [3, 8]을 잇고 [9, 2], [11, 6]를 이으면 두 선분은 평행합니다.
입출력 예 #2
점을 어떻게 연결해도 평행하지 않습니다.
제출코드
- 각 두개의 점들을 이은 두 선이 평행하는지 알기 위해선 기울기를 구해야 합니다.
기울기 = y값의 증가량 / x 값의 증가량 - 기울기가 같은 선이 있는지 확인합니다.
여기서 주의해야 할 점은 같은 기울기가 있는지만 비교해서는 안되고 어떤 점끼리 연결했는지도 구분되어야 합니다.
만약 먼저 좌표1과 좌표2를 연결했다면 좌표1은 다른 점들과 연결하지 못하기 때문에 좌표3과 좌표4를 연결한 선과 평행하는지 확인해야 합니다.
4개의 좌표에서는 3가지 케이스가 생기게 됩니다.(예제에 주석 확인)
class Solution {
private double calculateLean(int[] dotA, int[] dotB) {
return (double) (dotA[1] - dotB[1]) / (dotA[0] - dotB[0]);
}
public int solution(int[][] dots) {
int[] dot1 = dots[0];
int[] dot2 = dots[1];
int[] dot3 = dots[2];
int[] dot4 = dots[3];
// 좌표1, 좌표2를 연결한 선과 좌표3, 좌표4를 연결한 선 기울기 비교
if (calculateLean(dot1, dot2) == calculateLean(dot3, dot4)) return 1;
// 좌표1, 좌표3를 연결한 선과 좌표2, 좌표4를 연결한 선 기울기 비교
if (calculateLean(dot1, dot3) == calculateLean(dot2, dot4)) return 1;
// 좌표1, 좌표4를 연결한 선과 좌표2, 좌표3를 연결한 선 기울기 비교
if (calculateLean(dot1, dot4) == calculateLean(dot2, dot3)) return 1;
return 0;
}
}
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120875
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 겹치는 선분의 길이 (0) | 2024.11.07 |
---|---|
[프로그래머스] 옹알이 (1) (0) | 2024.11.06 |
[프로그래머스] 짝수는 싫어요 (1) | 2024.11.06 |
[프로그래머스] 배열 뒤집기 (0) | 2024.11.06 |
[프로그래머스] 양꼬치 (0) | 2024.11.06 |