본문 바로가기
온라인저지

[BOJ] 11758번: CCW

by plzfday 2018. 7. 27.

https://www.acmicpc.net/problem/11758

문제 그대로 CCW를 구현하는 문제다. 나는 CCW가 뭐 대단히 어려운 거라고 생각했고 그로 인해 좀 꺼려졌는데 이번에 기회가 있어서 다시 보니 그냥 아마 중학교 3학년 때 삼각형 넓이 구하는 공식 해서 '신발끈 공식'을 배운 적이 있었는데 그거였다. 물론 증명은 못하지만... 쓸 수는 있어서 기쁘다.

넓이가 양수면 반시계 방향, 음수면 시계 방향, 0이면 일직선(세 점이)인 것이다. 외우기도 쉬운게 CCW 뜻 자체가 counter clockwise: 반시계이기 때문에 ccw값이 양수면 반시계라는 게 외우기 쉽다.

#include <cstdio>

int ccw(int x1, int y1, int x2, int y2, int x3, int y3)
{
    int temp = x1 * y2 + x2 * y3 + x3 * y1;
    temp -= (x2 * y1 + x3 * y2 + x1 * y3);

    if (temp > 0)
        return 1;
    else if (temp < 0)
        return -1;
    return 0;
}

int main()
{
    int x[3], y[3];
    for (int i = 0; i < 3; ++i)
        scanf("%d %d", &x[i], &y[i]);
    printf("%d\n", ccw(x[0], y[0], x[1], y[1], x[2], y[2]));
    return 0;
}

 

'온라인저지' 카테고리의 다른 글

[BOJ] 9095번: 1, 2, 3 더하기  (0) 2018.07.27
[BOJ] 3029번: 경고  (0) 2018.07.27
[BOJ] 3042번: 트리플렛  (0) 2018.07.27
[BOJ] 15595번: 정답 비율 계산하기  (0) 2018.07.27
[BOJ] 3041번: N-퍼즐  (0) 2018.07.27
[BOJ] 3040번: 백설 공주와 일곱 난쟁이  (0) 2018.07.27

댓글