어흥

[백준 11758] CCW (C++) 본문

알고리즘/백준

[백준 11758] CCW (C++)

라이언납시오 2020. 12. 5. 13:42
728x90
반응형

문제 링크: 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

(간단한 외적 설명은 imnotabear.tistory.com/324, 자세한 설명은 degurii.tistory.com/47 참조)

 

1. 주의할 점

- 외적을 이용한 삼각형의 넓이 구하기 공식을 통해 CCW를 구할 수 있도록 한다

 

2. 구현

- 3개의 좌표를 X[], Y[]배열에 입력 받는다

- BA, CA 반직선에 대한 벡터를 각각 AA[], BB[] 배열에 담는다

- 외적 공식을 통해 둘의 넓이를 구하고, 넓이가 양수면 반시계, 음수면 시계, 0이면 일직선이다

 

#include <iostream>
using namespace std;
int x[3], y[3];

int ccw(int a, int b, int c) {
	int aa[2] = { y[b] - y[a],x[b] - x[a] };
	int bb[2] = { y[c] - y[a],x[c] - x[a] };
	int result = (aa[0] * bb[1] - aa[1] * bb[0]);
	if (result < 0) return 1;
	else if (result > 0) return -1;
	else return 0;
}

int main() {
	for (int i = 0; i < 3; i++)
		cin >> x[i] >> y[i];
	cout << ccw(0, 1, 2);
	return 0;
}
728x90
반응형
Comments