알고리즘 공부

[백준] 11758 CCW (신발끈 공식)

kdhoooon 2021. 11. 2. 22:02

문제


2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.

 

 

 

풀이


신발끈 공식을 알면 쉽게 풀수 있는 문제였다.

세점 (x1 , y1), (x2, y2), (x3, y3) 이 좌표로 주어 졌을 때, (x1y2 + x2y3 + x3y1) - (y1x2 + y2x3 + y3x1) 의 값이

양수면 CCW(반시계) , 음수면 CW(시계), 0 이면 일직선이다.

 

<전체코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	
	static int dir1, dir2;
	static point[] p;
	static StringBuilder sb = new StringBuilder();

	public static int parseInt(String string) {
		return Integer.parseInt(string);
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		p = new point[3];
		for(int i = 0 ; i < 3 ; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			p[i] = new point(parseInt(st.nextToken()), parseInt(st.nextToken()));
		}
		
		int ccw = (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(ccw > 0) {
			System.out.println(1);
		}
		else if(ccw < 0) {
			System.out.println(-1);
		}
		else {
			System.out.println(0);
		}
	}
	
	static class point{
		int x, y;
		point(int x, int y){
			this.x = x;
			this.y = y;
		}
	}
}

'알고리즘 공부' 카테고리의 다른 글

[백준] 11375 열혈강호 - 이분매칭  (0) 2022.01.07
[백준] 2749 피보나치 수 3  (0) 2021.10.29