(x, y) 좌표로 구성된 데이터 포인트 목록이 있다고 가정하고 데이터 포인트가 직선을 형성하는지 여부를 확인해야 합니다. 따라서 점이 [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]과 같으면 직선을 형성하고 있습니다. .
이를 해결하기 위해 각 연속 데이터 포인트 간의 차이를 가져와 기울기를 찾습니다. 먼저 기울기를 찾으십시오. 다른 모든 점에 대해 기울기가 동일한지 여부를 확인합니다. 동일하면 단순히 true를 반환하고 그렇지 않으면 false를 반환합니다.
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int gcd(int a, int b){ return !b?a:gcd(b,a%b); } bool checkStraightLine(vector<vector<int>>& c) { bool ans =true; bool samex = true; bool samey = true; int a = c[1][0]-c[0][0]; int b = c[1][1]-c[0][1]; int cc = gcd(a,b); a/=cc; b/=cc; for(int i =1;i<c.size();i++){ int x = c[i][0]-c[i-1][0]; int y = c[i][1]-c[i-1][1]; int z = gcd(x,y); x/=z; y/=z; ans =ans &&(x == a )&& (y == b ); } return ans; } }; main(){ Solution ob; vector<vector<int>> c = {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7}}; cout << ob.checkStraightLine(c); }
입력
[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
출력
1 (1 indicates true)