-풀이
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
'알고리즘' 카테고리의 다른 글
[그리디/정렬/우선순위큐] 백준 23843 파이썬 (콘센트) 골드5 (0) | 2022.06.02 |
---|---|
[백트래킹] 백준 9663 파이썬 (N-Queen) 골드5 (0) | 2022.06.01 |
[비트마스킹/조합] 백준 1062 파이썬 (가르침) 골드4 (0) | 2022.05.30 |
[순열/수학] 백준 1722 파이썬 (순열의 순서) 골드5 (0) | 2022.05.29 |
[구현/정규표현식] 백준 1013파이썬 (Contact) 골드5 (0) | 2022.05.28 |