[C++]CCW - 백준11758

문제



풀이

문제 해석을 하자면,

  • 입력으로 주어지는 세 점의 회전 방향을 구하라


풀이

  • 벡터의 외적을 이용해서 p1xp2 외적값이 양수인가 음수인가 0인가로 방향을 나타낸다.
    • 양수 : 반시계
    • 음수 : 시계
    • 0 : 일직선



코드

#include<iostream>
//#include<fstream>
#include<vector>
using namespace std;

struct point {
	int x; int y;
};
typedef point Point;

int ccw2(Point p, Point q) {
	return p.x * q.y - p.y * q.x;
}

int ccw(Point r, Point p, Point q) {
	// r만큼 빼서 원점으로 이동 (ccw2 계산 위해)
	p.x -= r.x;
	p.y -= r.y;
	q.x -= r.x;
	q.y -= r.y;
	return ccw2(p, q);
}

int direction(Point a, Point b, Point c) {
	if (ccw(a, b, c) > 0) return 1;
	if (ccw(a, b, c) < 0)return -1;
	return 0;
}

vector<Point> vc;

int main() {
	//ifstream fin("1.inp");
	//ofstream fout("11.out");

	Point inPoint;
	for (int i = 0; i < 3; i++) {
		cin >> inPoint.x >> inPoint.y;
		vc.push_back(inPoint);
	}
	cout << direction(vc[0], vc[1], vc[2]);

	return 0;
}



느낀점

생략

댓글남기기