byworld 님의 블로그

평행 존재 트릭 본문

알고리즘

평행 존재 트릭

byworld 님의 블로그 2026. 5. 3. 18:31

이것도 고등학교 교육과정에 있는 내용이다. 4점이 있을 때 평행을 찾아라. 정석대로면 순열을 다 고르고 점이 중복안되는 것에서 벡터 구해서 최대공약수로 나누고 부호 생각해서 정규화하고 했겠지만? 뭔가 좀 짧게 구하고 싶었다.

https://school.programmers.co.kr/learn/courses/30/lessons/120875

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;
bool f(vector<vector<int>>& d,int a,int b,int c,int e){
    return (d[b][0]-d[a][0])*(d[e][1]-d[c][1])==(d[b][1]-d[a][1])*(d[e][0]-d[c][0]);
}

int solution(vector<vector<int>> dots) {
    return f(dots,0,1,2,3)||f(dots,0,2,1,3)||f(dots,0,3,1,2);
}

 

일단 한 선이 되는 경우의 수가 4C2로 6가지이다. 근데? 다른 선은 한 선이 결정되면 확정되므로, 3가지가 경우의 수만 구하면 된다. 그리고 기울기가 같은 것을 구해야하는데, a.dy/a.dx=b.dy/b.dx 이므로(x 변화율이 0아닐때) a.dy*b.dx=a.dx*b.dy 이다. 기울기가 같으면 평형이라고 보자.(일직선상에 있어도 평행선이라고 문제 조건에 나왔다.) 그래서 결국 그 함수에 대해서 3가지 경우의 수 중 하나라도 만족하면 참 아니면 거짓으로 답이 나온다. EZPZ.

'알고리즘' 카테고리의 다른 글

멸종위기의 대장균 찾기  (1) 2026.05.10
격자 위 최단경로 문제  (0) 2026.05.09
프로그래머스 노란불 신호등 + LLM은 바보야  (0) 2026.05.07
등차함수 알고리즘 트릭  (0) 2026.05.03
치킨 쿠폰 숏코딩  (0) 2026.05.03