728x90
http://www.acmicpc.net/problem/2166
# 조건
- 2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다.
- 이 다각형의 면적을 구하는 프로그램을 작성하시오.
입력
- 첫째 줄에 N이 주어진다.
- 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다.
- 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
출력
- 첫째 줄에 면적을 출력한다.
- 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.
# 접근 방법
- 변의 길이가 다른 다각형 넓이 구하는 공식을 사용하면 된다.
- 다각형의 좌표를 쓴다.
- 반시계 방향 순서로 x와 y좌표를 리스트로 나열한 후 첫 꼭지점의 좌표를 맨 마지막에 하나 더 추가해준다.
- 각 꼭지점의 x좌표를 다음 꼭지점 좌표의 y값과 곱한 후 각 결과들을 더한다. - 결과1
- 반대로 각 y좌표 값을 다음 x좌표 값들과 곱하여 각 결과들을 더해준다. - 결과2
- (결과2 - 결과1) / 2 하면 다각형의 넓이가 나온다.
- 신발끈 정리라고도 불린다.
- 문제에서는 다각형을 이루는 순서대로 주어지기 때문에 정렬을 따로 해줄 필요는 없다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
N = int(input())
dot = []
for _ in range(N):
dot.append([*map(int, input().split())])
dot.append(dot[0])
plus = 0
minus = 0
for i in range(N):
plus += dot[i][0]*dot[i+1][1]
minus += dot[i][1]*dot[i+1][0]
S = abs(plus-minus)/2
print(round(S,1))
728x90
'ALGORITHM > 수학, 기하학' 카테고리의 다른 글
[백준 17387번] 파이썬 - 선분교차 2 (0) | 2023.03.19 |
---|---|
[백준 13458번] 파이썬 - 시험 감독 (0) | 2023.03.09 |
[백준 2568번] 파이썬 - 전깃줄2 (0) | 2023.01.14 |
[백준 1007번] 파이썬 - 벡터 매칭 (0) | 2023.01.07 |
[백준 3096번] 파이썬 - 영화제 (0) | 2023.01.03 |