본문 바로가기
알고리즘/프로그래머스

[C++] 평행

by parkkingcar 2023. 5. 25.

 

평행

 

점 네 개의 좌표를 담은 이차원 배열  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

댓글