728x90
해설:
세 점의 좌표를 입력받아 이들이 이루는 벡터의 외적(교차 곱)을 계산하여 세 점이 반시계 방향인지, 시계 방향인지, 또는 일직선상에 있는지를 판별하는 프로그램을 만들어야 함. 여기서 `ccw`는 Counter Clockwise(반시계 방향)의 약자로, 세 점의 좌표를 이용하여 계산한 외적 값임.
1. `x1 * y2 + x2 * y3 + x3 * y1`은 세 점의 외적 값
2. `- y1 * x2 - y2 * x3 - y3 * x1`은 위에서 계산한 값을 빼주는 역할
3. `ccw` 값이 양수이면 세 점은 반시계 방향으로 배열되어 있고, 음수이면 시계 방향으로 배열되어 있으며, 0이면 일직선상에 위치해 있음을 의미.
코드:
더보기
#include <stdio.h>
int main() {
// 3개 점의 좌표를 입력.
int x1, x2, y1, y2, x3, y3;
scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3);
// 교차 곱을 계산.
int ccw = x1 * y2 + x2 * y3 + x3 * y1;
ccw = ccw - y1 * x2 - y2 * x3 - y3 * x1;
// ccw가 양수면 반시계 방향, 음수면 시계 방향, 0이면 일직선 상
if (ccw > 0)
printf("1"); // 반시계 방향
else if (ccw < 0)
printf("-1"); // 시계 방향
else
printf("0"); // 일직선 상
return 0;
}
728x90
'Study > Programming' 카테고리의 다른 글
BOJ 2738번 : 행렬 덧셈 / C언어 (0) | 2024.03.28 |
---|---|
BOJ 11727번 : 2xn 타일링 2 / C언어 (0) | 2024.03.28 |
BOJ 11726번 : 2xn 타일링 / C언어 (0) | 2024.03.28 |
BOJ 1564번 : 팩토리얼5 / C언어 (0) | 2024.03.27 |
BOJ 2751번 : 수 정렬하기 2 / C언어 (0) | 2024.03.20 |