본문 바로가기

카테고리 없음

[백준 2166번] 다각형의 면적 (Python3)

import sys
input = sys.stdin.readline

N = int(input())
xy = []

for i in range(N):
  xy.append(tuple(map(int,input().split())))

result = 0
for i in range(N-1):
  x1,y1 = xy[i]
  x2,y2 = xy[i+1]
  result += (x1*y2-x2*y1)/2

x1,y1 = xy[-1]
x2,y2 = xy[0]
result += (x1*y2-x2*y1)/2

print(abs(round(result,1)))

 

수학적인 배경지식이 조금 있어야 풀 수 있는 문제.

두 벡터의 외적이 평행사변형의 넓이라는것을 알면 쉽게 풀 수 있다.

0,0을 기준점으로 잡고 처음점과 두번째 점까지의 벡터를 외적하고, 2로 나누어주면 0,0과 한 변이 이루는 삼각형의 넓이이다.

이때 원래는 절댓값을 씌워주어야 삼각형의 넓이지만 우리는 다각형의 넓이를 구하는 것이기 때문에 부호를 신경쓰지않고 처음부터 끝까지 더해준 뒤 절댓값을 씌워야 한다.

 

 

오늘의 교훈) 프로그래밍을 잘하기 위해선 수학공부가 필수이다.