# 문제상황
다각형의 좌표들을 모두 알고 있을 때, 다각형 넓이를 쉽게 구할 수 있는 공식이 있습니다.
고등학교 때 교육과정에는 없는 내용이지만 수업시간에 '이런 공식도 있습니다~' 하고 흘러가듯이 들었던 적이 있었는데 이렇게 알고리즘 문제를 풀 때 만나게 됐네요.
다음 점 A(-4, 9), B(-3, -2), C(-1, 4), D(6, 1), E(3, 10)로 구성된 다각형의 넓이를 구해봅시다.
넓이를 구하는 과정을 그림 하나에 모두 담아보았습니다.
단계별로 설명하자면 다음과 같습니다.
1단계) 각 좌표들을 반시계 방향으로 나열하고, 맨 끝에는 제일 첫 좌표를 한 번 더 써줍니다.
- 제일 첫 좌표를 한 번 더 써주는 거 잊지 마세요!
- 만일 좌표들을 시계 방향으로 나열하고 문제를 풀면 넓이가 음수로 나옵니다.
- 역으로 주어진 좌표들이 시계 방향인지 반시계 방향인지를 판별해야되는 문제가 나온다면, 넓이를 구해보면 됩니다.
(넓이가 양수면 반시계, 음수면 시계 방향)
2단계) ↘ 방향으로 마주하는 값들끼리 곱해서 모두 더해주세요.
- 위 그림에서는 파란색 화살표로 연결된 값들끼리 곱해서 더해주면 됩니다.
3단계) ↙ 방향으로 마주하는 값들끼리 곱해서 모두 더해주세요.
- 위 그림에서는 초록색 화살표로 연결된 값들끼리 곱해서 더해주면 됩니다.
4단계) "2단계의 값 - 3단계의 값"을 2로 나눠주면 됩니다!
# 답
N = int(input())
dot = [tuple(map(int, input().split())) for _ in range(N)]
dot.append(dot[0])
ans1 = ans2 = 0
for i in range(N):
ans1 += dot[i][0] * dot[i + 1][1]
ans2 += dot[i][1] * dot[i + 1][0]
print(round(abs(ans1 - ans2) / 2, 2))
728x90
반응형
'Algorithm > BaekJoon' 카테고리의 다른 글
(파이썬) 백준 1654번 "랜선 자르기" (0) | 2022.05.19 |
---|---|
(파이썬) 백준 17386번 "선분 교차 1" (0) | 2022.05.12 |
(파이썬) 백준 3053번 "택시 기하학" (0) | 2022.05.11 |
(파이썬) 백준 2343번 "기타 레슨" (0) | 2022.04.29 |
(파이썬) 백준 9465번 "스티커" (0) | 2022.04.25 |