#유형 : 벡터의 외적, CCW
#난이도 : 골드 V
# CCW 공식 (x1y2+x2y3+x3y1)−(y1x2+y2x3+y3x1)을 활용하여 쉽게 해결할 수 있던 문제.
# CCW는 Counter Clockwise의 약자로써, 평면 위에 놓여진 세 점의 방향관계를 구할 수 있는 알고리즘입니다.
먼저 한 줄로 요약하자면, CCW는 점 를 순서대로 봤을때 반시계방향으로 놓여 있으면 양수를, 시계방향이면 음수를, 평행하게 놓여있으면 0을 반환하게 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package bj;
import java.awt.Point;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class p11758 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Point[] po = new Point[3];
StringTokenizer st;
for(int i=0; i<3; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
po[i] = new Point(x,y);
}
System.out.println(ccw(po));
}
public static int ccw(Point[] p) {
//CCW 공식 (x1y2+x2y3+x3y1)−(y1x2+y2x3+y3x1)
// CCW는 점 A,B,C를 순서대로 봤을때 반시계방향으로 놓여 있으면 양수를, 시계방향이면 음수를, 평행하게 놓여있으면 0을 반환하게 됩니다.
int result = ((p[0].x*p[1].y) + (p[1].x*p[2].y) + (p[2].x * p[0].y)) - ((p[0].y*p[1].x) + (p[1].y*p[2].x) + (p[2].y*p[0].x));
if(result < 0)
return -1;
else if(result > 0)
return 1;
else
return 0;
}
}
|
cs |
'백준' 카테고리의 다른 글
#백준_2467 용액 - Java 자바 (0) | 2020.05.03 |
---|---|
#백준_2166 다각형의 면적 - Java 자바 (0) | 2020.05.02 |
#백준_1916 최소비용 구하기 - Java 자바 (0) | 2020.04.30 |
#백준_1865 웜홀 - Java 자바 (0) | 2020.04.28 |
#백준_16593 A → B - Java 자바 (0) | 2020.04.27 |