7월 6일(목) - 기하학 (11758번)
11758번: CCW
첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
최초 생각 정리
- 외적 공식을 사용한다
- 선분 p1p2와 선분 p2p3를 이용해서 외적계산을 진행한다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
int ccw(int x1, int y1, int x2, int y2, int x3, int y3)
{
int first = (x2 - x1) * (y3 - y1);
int second = (y2 - y1) * (x3 - x1);
if (first - second > 0)
{
return 1;
}
else if (first - second < 0)
{
return -1;
}
else
{
return 0;
}
}
int main(void)
{
int x1, x2, x3, y1, y2, y3;
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
scanf("%d %d", &x3, &y3);
printf("%d", ccw(x1, y1, x2, y2, x3, y3));
return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이 - 2
(230720 추가 -> CCW 알고리즘에 대해서 제대로 이해한 후 풀이 추가)
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
int ccw(int x1, int y1, int x2, int y2, int x3, int y3)
{
int temp = x1 * y2 + x2 * y3 + x3 * y1;
temp = temp - y1 * x2 - y2 * x3 - y3 * x1;
if (temp > 0)
{
return 1;
}
else if (temp < 0)
{
return -1;
}
else
{
return 0;
}
}
int main(void)
{
int x1, x2, x3, y1, y2, y3;
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
scanf("%d %d", &x3, &y3);
printf("%d", ccw(x1, y1, x2, y2, x3, y3));
return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(C언어) > 23년 7월' 카테고리의 다른 글
[C] 백준 - 1003번: 피보나치 함수 (0) | 2023.07.10 |
---|---|
[C] 백준 - 7576번: 토마토 (0) | 2023.07.07 |
[C] 백준 - 1026번: 보물 (0) | 2023.07.05 |
[C] 백준 - 1920번: 수 찾기 (0) | 2023.07.04 |
[C] 백준 - 9095번: 1, 2, 3 더하기 (0) | 2023.07.03 |
댓글