[BaekJoon] 백준 2166번 : 다각형의 면적

Updated:

2166번 : 다각형의 면적


학교 다닐 때 배운 것 같은 신발끈 공식을 이용하여 다각형의 넓이를 구하면 된다.

신발끈 공식을 이용하려면 주어진 점을 시계 방향이나 반시계 방향으로 정렬해야한다.

문제를 잘 읽어보면 다각형을 이루는 순서대로 점을 주기 때문에 주어진 그대로 공식에 적용하면 된다.

처음에 이 조건을 못 봐 시계 방향으로 정렬을 하려고 했는데 굉장히 어려운 문제였다..

탄젠트 각도를 이용해 정렬 한 뒤.. 작업을 한다.. convex hull 문제에 적용이 가능하다.


import sys


def solution():
    a, b = 0, 0

    for i in range(N):
        a += coord_x[i] * coord_y[i + 1]
        b += coord_x[i + 1] * coord_y[i]

    return abs((a - b) / 2)


if __name__ == "__main__":
    N = int(input())
    coord_x = []
    coord_y = []

    for _ in range(N):
        coord = tuple(map(int, sys.stdin.readline().split()))
        coord_x.append(coord[0])
        coord_y.append(coord[1])

    coord_x.append(coord_x[0])
    coord_y.append(coord_y[0])

    print(solution())



Categories:

Updated:

Leave a comment