본문 바로가기
알고리즘

다각형의 면적 [백준 2166] - python

by 우보틀 2021. 12. 21.

 

import sys 
import math
input = sys.stdin.readline

def BOJ2166() :
  N = int(input())
  x_points = []
  y_points = []
  
  for _ in range(N) :
    x, y = map(int, input().split())
    x_points.append(x)
    y_points.append(y)

  result = 0
  for i in range(N) :
    if i == N-1 :
      result += x_points[i] * y_points[0]
    else :
      result += x_points[i] * y_points[i+1]

  for i in range(N):
    if i == N-1 :
      result -= x_points[0] * y_points[i]
    else :
      result -= x_points[i+1] * y_points[i]

  print(math.floor((abs(result) * 0.5 * 10) + 0.5) / 10)

BOJ2166()

 

접근 방법 :

0. 신발끈 공식을 사용했다.(링크는 아래에)

1. 신발끈 공식을 접근후에 반올림 처리만 잘 해주면 어렵지 않게 풀수 있다.

 

장애물 이였던 것 :

0. 공식의 존재에 관하여 알지 못했다.

1. 도형의 정중앙 지점을 구하고 꼭짓점중 인근한 두 지점을 구하려 했다.

2. n개의 삼각형이 만들어지므로 이들의 넓이 합을 전부 더해서 답에 접근하려 했었다.

3. 2번의 조합을 구하는 지점에서 어떻게 조합을 구하든 예외가 발생했고 공식의 유무를 찾기 시작했다.

 

 

 

https://www.acmicpc.net/problem/2166

 

2166번: 다각형의 면적

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

www.acmicpc.net