반응형

-풀이

import sys
input = sys.stdin.readline
n = int(input())
x, y = [], []
answer = 0
for _ in range(n):
    a, b = map(int,input().split())
    x.append(a)
    y.append(b)
x, y = x + [x[0]], y + [y[0]]

for i in range(n):
    answer += (x[i]*y[i+1])-(x[i+1]*y[i])
print(round(abs(answer)/2,1))

-풀이 설명

다각형을 구하는 공식이 있는데, 오목한 n각형과 볼록한 n각형을 구하는 공식이 따로 있고, 이에 상관없이 사용할 수 있는 공식인 신발끈 공식이 있어서 제일 후자를 선택하여 풀었다. 

신발끈 원리는 각 모서리 마다 원점(0,0)을 기준으로 하는 삼각형의 넓이를 계산하여, 평행 사변형의 넓이와 같은 벡터곱(cross product)들을 모두 합쳐 2로 나눈다. 만약 원점 기준으로 모서리들이 반시계 방향으로 돈다면, 양의 면적이 더해지게 되고 반시계 방향으로 돈다면 음의 면적이 더해지게 되는 것이다. 이 문제는 넓이만 구하면 되므로 절댓값처리를 해준다.

공식을 사용했을 뿐 공식이 나오기까지의 과정은 좀 더 생각해보아야 할 것 같다.

위키피디아 신발끈 공식 : https://ko.wikipedia.org/wiki/%EC%8B%A0%EB%B0%9C%EB%81%88_%EA%B3%B5%EC%8B%9D

다각형 풀이 참조: https://darkpgmr.tistory.com/86

+ Recent posts