본문 바로가기

ALGORITHM/MATH

12781 PIZZA ALVOLOC

https://www.acmicpc.net/problem/12781

 

12781번: PIZZA ALVOLOC

입력의 첫 줄에는 도윤이와 친구들이 선택한 점의 좌표 x, y(-10,000 ≤ x, y ≤ 10,000)가 순서대로 4개 주어진다. x, y값은 항상 정수이다.

www.acmicpc.net

단순하게 수학처럼 선의 방정식을 구해서 교점을 찾으려고 했지만,

교점이 그 도형 안에 존재하는지에 대한 확신을 구하기에는 너무 복잡해서 다른 식으로 접근해야 했다._.

https://www.acmicpc.net/blog/view/27

 

점 3개의 방향성을 나타내는 CCW

세 점 P1(x1, y1), P2(x2, y2), P3(x3, y3)가 있을 떄, 점 3개를 이은 선분은 어떤 방향성을 나타내게 될까요? 11758번 문제: CCW 가능한 경우의 수는 총 3가지가 있습니다. 반시계 방향, 시계 방향, 일직선. 시

www.acmicpc.net

위 사진에서는 파란선과 보라색선의 방향이 다르니 -1, 

아래 사진에서는 방향이 같으니 1 이 나온다.

 

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int CCW(int x1, int y1, int x2, int y2, int x3, int y3) {
	int a = (x1 * y2) + (x2 * y3) + (x3 * y1) - (x2 * y1) - (x3 * y2) - (x1 * y3);
	if (a > 0) {
		return 1;
	}
	else if (a == 0) {
		return 0;
	}
	else if (a < 0) {
		return -1;
	}
}

int main() {
	int x1, y1, x2, y2, x3, y3, x4, y4;
	cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;

	int a = CCW(x1, y1, x2, y2, x3, y3);
	int b = CCW(x1, y1, x2, y2, x4, y4);

	if (a * b < 0) {
		cout << 1;
	}
	else {
		cout << 0;
	}
}

 

 

 

 

 

주저리.

세상엔 신기한 방식이 정말많다..

그나저나 배열 선언하기도 귀찮았나 보다 ㅇ0ㅇ

'ALGORITHM > MATH' 카테고리의 다른 글

17266 어두운 굴다리  (0) 2021.01.07