알고리즘 문제/백준

11758 CCW (기하학) [Gold V]

우대비 2024. 5. 16. 12:06
반응형

11758번: CCW (acmicpc.net)

 

이 문제는 CCW(Counter-Clockwise) 공식을 알고있는지 물어보는 문제입니다.

이 공식을 이용하면 시계 반대방향으로 회전하는지 확인할 수 있습니다.

 

CCW 공식은 아래와 같습니다.

CCW = (A.x*B.y + B.x*C.y + C.x*A.y) - (A.x*C.y + B.x*A.y + C.x*B.y)

 

A, B 벡터를 기준으로 C벡터가 왼쪽 방향에 위치한지 오른쪽 방향에 위치한지 알 수 있으며

시계 방향일 경우 0보다 작은 이 나오고

반시계 일 경우에는 0보다 큰 값이 나옵니다.

세 벡터가 일직선에 놓인 경우에는 결과값으로 0이 나옵니다.

 

풀이법

11758번 문제는 3개의 벡터 x,y값을 입력받고

시계 방향을 나타내면 1, 반시계는 -1, 일직선을 0을 출력하면 되는 문제입니다.

 

CCW를 입력받고 -1 ~ 1로 clamp하여 출력하면 되겠습니다.

 

정답 코드

int main()
{
        int v[3][2];
        for (int i = 0; i < 3; i++)
        {
                int a, b;
                cin >> a >> b;
                v[i][0] = a;
                v[i][1] = b;
        }
         
        int result = (v[0][0]*v[1][1] + v[1][0]*v[2][1] + v[2][0]*v[0][1])
                -  (v[0][0]*v[2][1] + v[1][0] * v[0][1] + v[2][0] * v[1][1]); 
         
        result = result > 0 ? 1 : result < 0 ? -1 : 0;
        cout << result << "\n";
}

 

반응형
LIST