mojo's Blog

[백준 11758] CCW 본문

백준/etc

[백준 11758] CCW

_mojo_ 2021. 8. 14. 21:03

문제 링크 => 11758번: CCW (acmicpc.net)

 

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


외적을 이용하는 문제이다.

 

삼각형 ABC 가 있다고 할 때, 벡터  a를 점 A에서 B로 가는 벡터라 하고  벡터 b를 점 A에서 C로 가는 벡터라고 가정한다.

 

외적의 성질을 통해 a x b = |a||b| sin(t) 가 성립한다.

 

이때 sin(t) > 0 일때 점 C는 선분 AB 의 위에 존재하므로 반시계 방향이다.

 

반대로 sin(t) < 0 일때 점 C는 선분 AB 의 아래에 존재하므로 시계 방향이다.

 

sin(t) = 0 일때 점 C는 선분 AB 와 일직선을 이룬다.

 

풀이 code

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <math.h>
#include <map>
#include <set>
#define INF 1000000000
#define endl '\n'

using namespace std;

int x1, x2, x3;
int y11, y2, y3;
pair<int, int> v1, v2;

void input() {
	cin >> x1 >> y11;
	cin >> x2 >> y2;
	cin >> x3 >> y3;
}

void solve() {
	v1.first = x2 - x1, v1.second = y2 - y11;
	v2.first = x3 - x1, v2.second = y3 - y11;
	int a = v1.first * v2.second;
	int b = v1.second * v2.first;
	if (a - b > 0) cout << 1;
	else if (a - b < 0) cout << -1;
	else cout << 0;
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	input();
	solve();

	return 0;
}

 

 

'백준 > etc' 카테고리의 다른 글

[백준 16491] 대피소 찾기  (0) 2021.08.14
[백준 17386] 선분 교차 1  (0) 2021.08.14
[백준 1701] Cubeditor  (0) 2021.08.12
[백준 1786] 찾기  (0) 2021.08.11
Priority_queue 를 최대 Heap 으로 구현해보기  (0) 2021.08.05
Comments