알고리즘/프로그래머스
[C++] 평행
parkkingcar
2023. 5. 25. 20:49
평행
점 네 개의 좌표를 담은 이차원 배열 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 타입으로 변환하여 나눠줍니다.