크게 생각하고, 목표를 높게 잡고, 대담하게 행동하라.

“언젠가는 목표에 이를지도 모르는 단계를 밟는 것으로는 언제나 실패한다. 모든 단계가 그 자체로 목표인 동시에 목표로 이르는 단계여야한다.” - 괴테

알고리즘/기하학

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

o_onn5 2023. 2. 4. 08:38
728x90

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

 

2166번: 다각형의 면적

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

www.acmicpc.net


문제

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

입력

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

출력

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

예제 입력 1

4
0 0
0 10
10 10
10 0

예제 출력 1

100.0

 

기하학 문제를 가져와봤다. 기하학 문제는 브론즈 이후로 처음 풀어보는 것 같다.

딱히 관심있는 알고리즘은 아니고 solved.ac에서 CLASS 5 뱃지 따려고 푼 문제^^

 

그냥 문제보니 사선공식(신발끈공식) 사용하면 되겠다 싶어서 빨리 풀었다.

 

https://tgs05016.tistory.com/entry/사선식신발끈-공식-삼각형-넓이-구하는-공식

 

n = int(input())
x, y = [], []
for _ in range(n):
    a,b = map(int,input().split())
    x.append(a)
    y.append(b)
x.append(x[0])
y.append(y[0])
ans = 0
for i in range(n):
    ans += x[i] * y[i+1]
    ans -= y[i] * x[i+1]

print(round(abs(ans/2), 1))
728x90