평행
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요. 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
주어진 두 선분이 평행하려면 기울기가 같고, y절편이 달라야 합니다. 이때 추가조건으로 두직선이 겹치는 경우에도 1을 반환하기 때문에 y절편은 고려하지 않습니다.
따라서 4개점 중 각각 두 점씩 쌍을 지어 두 선분을 만들고, 그 두 선분의 기울기가 같은 경우 1을 반환하도록 풀이하였습니다.
#include <string>
#include <vector>
using namespace std;
double gradient(int x1, int x2, int y1, int y2){ // 기울기 구하기
return (double)(x2 - x1) / (double)(y2 - y1);
}
int solution(vector<vector<int>> dots) {
if(gradient(dots[0][0], dots[1][0], dots[0][1], dots[1][1]) == gradient(dots[2][0], dots[3][0], dots[2][1], dots[3][1])) return 1;
if(gradient(dots[0][0], dots[2][0], dots[0][1], dots[2][1]) == gradient(dots[1][0], dots[3][0], dots[1][1], dots[3][1])) return 1;
if(gradient(dots[0][0], dots[3][0], dots[0][1], dots[3][1]) == gradient(dots[2][0], dots[1][0], dots[2][1], dots[1][1])) return 1;
return 0;
}
주의할 점은 기울기를 구할 때, 기울기가 분수가 되는경우를 고려해야 하기 때문에 double 타입으로 변환하여 나눠줍니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] 최댓값과 최솟값 (0) | 2023.06.05 |
---|---|
[C++] 옹알이 (1) (0) | 2023.05.30 |
[C++] 연속된 수의 합 (0) | 2023.05.24 |
[C++] 치킨 쿠폰 (0) | 2023.05.23 |
[C++] 다음에 올 숫자 (0) | 2023.05.23 |
댓글