[백준/파이썬] 2166번: 다각형의 면적

수박강아지·2025년 6월 13일

BAEKJOON

목록 보기
92/174

문제

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

풀이

  • N개의 점으로 이루어진 다각형의 넓이 출력

사각형의 넓이를 구하는 것이었다면 굉장히 쉬웠겠지만 ..
문제의 조건을 보면 N은 3 이상 10000이하의 크기를 갖고 있습니다.

어떻게 접근을 해야할까 고민하던 중, 고등학교 시절 기하와 벡터에서 배웠던 신발끈 공식이 생각이 나서 이를 이용해 풀었습니다.

신발끈 공식이란?

좌표평면 상에서 다각형의 꼭짓점 좌표를 알 때 그 면적을 구하는 방법

  • 가우스의 면적 공식이나 사선 공식이라고도 불린다.

모든 좌표를 세로로 나열하고, x1은 y2와 곱해 더하고, y1은 x2와 곱해 빼는 방식으로 계산합니다.
좌표를 모두 계산한 결과를 2로 나누어 주면 구하고자 하는 도형의 넓이를 구할 수 있습니다.

여기서 유의할 점은 마지막 좌표까지 모두 계산을 해주어야 한다는 것입니다.(마지막 x,y는 첫번째 x,y와 계산)

참고: https://soooom.tistory.com/449


answer = 0
for i in range(n):
    x1,y1 = graph[i]
    x2,y2 = graph[(i+1) % n]
    answer += (x1 * y2 - x2 * y1)
answer = abs(answer) / 2
  • n개의 좌표를 모두 탐색을 진행
  • x2, y2는 마지막 좌표일 경우 첫번째 좌표와 계산을 진행해야하기 때문에, mod n을 추가해줍니다.
  • 모든 계산이 끝나면 2로 나누어 출력

코드

import sys
input = sys.stdin.readline

n = int(input())
graph = [list(map(int,input().split())) for _ in range(n)]

answer = 0
for i in range(n):
    x1,y1 = graph[i]
    x2,y2 = graph[(i+1) % n]
    answer += (x1 * y2 - x2 * y1)
answer = abs(answer) / 2

print(f'{answer:.1f}')

0개의 댓글