본문 바로가기

매일 알고리즘 2문제

11758 CCW

다시 마음을 가다듬고, 2월 1일 다시 알고리즘 2문제 시작!

그동안 까먹어서인지, 다시 CCW 알고리즘부터 시작한다.


CCW 알고리즘은 Counter-Clock Wise 즉 반시계방향을 의미한다.


세가지의 케이스로 생각해보면 좋은데,


첫번째 경우, 아래와 같이 시계방향으로 진행할 때,

두번째 경우, 아래와 같이 반시계방향, 


세번째 경우 일직선으로 이동


세가지 경우 모두 세개의 점으로 구성된 예시를 보여주고 있는데,  이와 같이 세점으로 이루어진 삼각형 면적을 구하는 방법은

(x1, y1) , (x2, y2), (x3, y3) 로 이루어진 3점을 통해 위와 같은 식으로 계산가능하다.


부호에 따라 첫번째 그림과 같은 시계방향일 경우 0보다 큰 수,

두번째 그림과 같은 반시계방향의 경우 0보다 작은 음수,

세번째 그림과 같이 일직선의 경우 0으로 S의 값이 나타나게 된다.



* 참고) 백준 https://www.acmicpc.net/blog/view/27



이를 이용한 11758의 식은


<소스코드>


#include <cstdio>

int x1, x2, x3, y1, y2, y3;

int main() {
         scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3);
         int sum = (x2 - x1)*(y3 - y1) - (y2 - y1)*(x3 - x1);
         if (sum < 0) printf("-1\n");
         else if (sum == 0) printf("0\n");
         else printf("1\n");
         return 0;
}


'매일 알고리즘 2문제' 카테고리의 다른 글

2789 유학 금지  (0) 2018.02.02
3163 떨어지는 개미  (0) 2018.02.02
2960 에라토스테네스의 체  (0) 2018.02.01
[Day 1] 이동하기  (0) 2017.07.06
[Day 1] 연속합  (0) 2017.07.06