반응형

www.acmicpc.net/problem/11758

 

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

+ Recent posts