Home 백준 2166번 다각형의 면적
Post
Cancel

백준 2166번 다각형의 면적

정보

문제 바로가기 [클릭]

난이도: Gold5

관련 개념: #기하학 #다각형의 넓이


조건

시간 제한메모리 제한
2 초128 MB

문제

2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.


입력

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


출력

첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.


예제 입출력 1

입력

1
2
3
4
5
4
0 0
0 10
10 10
10 0

출력

1
100.0

코드(파이썬)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys


n = int(sys.stdin.readline())
nums = [tuple(map(int, sys.stdin.readline().split())) for _ in range(n)]
nums = nums + [nums[0]]
left, right = 0, 0

for i in range(n):
    left += nums[i][0] * nums[i+1][1]
    right += nums[i][1] * nums[i+1][0]
    
print(f"{abs(left-right) / 2:.1f}")


특이사항

  • 해결방법
    • 다각형의 넓이를 구하는 방법 탐색
      • 모든 i번째 x좌표와 y좌표를 i+1번째 y좌표와 x좌표를 곱함(첫 번째 좌표를 마지막에 추가)
      • i_x, i+1_y의 곱의 합과 i_y, i+1_x의 곱의 합을 빼고 이를 2로 나누면 다각형의 면적
    • 그대로 알고리즘 구현

참고문헌

This post is licensed under CC BY 4.0 by the author.

백준 2661번 좋은수열

220일 문제 풀이 여정의 끝과 새로운 시작

Comments powered by Disqus.