반응형
11758번: CCW
첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.
www.acmicpc.net
수업시간에 세 점이 이루는 꺾인선의 방향을 구해 교차여부를 알아내는 방법을 배웠다.
기억을 위해 거의 비슷한 문제로 복습을 해보았다.
#include<iostream>
using namespace std;
struct point {
int x;
int y;
}first, second;
struct line {
struct point p1;
struct point p2;
}testLine;
int direction(struct point A, struct point B, struct point C) {
int dxAB, dxAC, dyAB, dyAC, Dir;
dxAB = B.x - A.x; dxAC = C.x - A.x;
dyAB = B.y - A.y; dyAC = C.y - A.y;
if (dxAB * dyAC < dyAB * dxAC) Dir = -1;
if (dxAB * dyAC > dyAB * dxAC) Dir = 1;
if (dxAB * dyAC == dyAB * dxAC) {
/*if (dxAB == 0 && dyAB == 0) Dir = 0;
if ((dxAB * dxAC < 0) || (dyAB * dyAC < 0)) Dir = 1;
else if ((dxAB * dxAB + dyAB * dyAB) >= (dxAC * dxAC + dyAC * dyAC)) Dir = 0;
else Dir = -1;*/
Dir = 0;
}
return Dir;
}
int main(void) {
struct point A;
struct point B;
struct point C;
int i,x, y;
cin >> x >> y;
A.x = x;
A.y = y;
cin >> x >> y;
B.x = x;
B.y = y;
cin >> x >> y;
C.x = x;
C.y = y;
cout <<direction(A, B, C);
return 0;
}
이 문제는 세 점이 한 직선위에 존재한다는 가정을 뺀 상태이므로 세 점의 중간점이 무엇인지에 대한 부분은 주석처리
했다.
반응형
'BOJ' 카테고리의 다른 글
[BOJ 2146] 다리 만들기 (0) | 2024.01.26 |
---|---|
[백준 1018번] 체스판 다시 칠하기 (0) | 2021.05.03 |
[백준] 순열 & 조합 (Permutation & Combination) (0) | 2021.04.27 |
[백준 9012번] 괄호 (0) | 2021.04.25 |
[백준 10773번] 제로 (0) | 2021.04.22 |