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 |
댓글