본문 바로가기
Algorithm/백준

[Python] 백준 2166번 - 다각형의 면적 (골드 5)

by 애기 개발자 2023. 10. 27.
반응형

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을 넘지 않는 정수이다.

출력

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

 

 


2023.10.25 - [Algorithm/백준] - [Python] 백준 11758번 - CCW (골드 5)

 

[Python] 백준 11758번 - CCW (골드 5)

https://www.acmicpc.net/problem/11758 11758번: CCW 첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌

baby-dev.tistory.com

 

이 문제의 연장선으로 신발끈 방식을 사용하여 n각형의 넓이를 구할 수 있다.

 

우선 왼쪽위와 오른쪽아래를 곱한 수를 모두 더해준다.

 

 

위와 같은 방식으로 오른쪽 위와 왼쪽 아래를 곱한 수를 모두 더해준다.

 

그리고 더한 두 수를 뺀 후 2로 나누어주면 해당 좌표들의 면적이 된다.

 

import sys
input = sys.stdin.readline

n = int(input())
data = []
for _ in range(n):
    data.append(list(map(int, input().split())))
    
s1, s2 = 0, 0
for i in range(n-1):
    s1 += data[i][0] * data[i+1][1]
    s2 += data[i][1] * data[i+1][0]
s1 += data[n-1][0] * data[0][1]
s2 += data[n-1][1] * data[0][0]

s = abs(s1 - s2) / 2.0
print(s)

  

반응형

댓글