백준 온라인 저지 [BOJ]/PYTHON [파이썬]

[백준(BOJ)] 2166번 : 다각형의 면적 - PYTHON[파이썬]

퉁이리 2021. 11. 16. 02:44
반응형

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

 

2166번: 다각형의 면적

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

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 기하학
  • 다각형의 넓이

 


 

⊙ 문제 접근 과정

 

학창 시절 수학 시간에 배웠던 '신발끈 공식'

 

신발끈 공식을 사용하면 바로 풀 수 있다.

 

출처 : 나무위키

 

🔎 신발끈 공식이란?

적색 화살표가 지나는 원소들의 곱의 합에서 한 청색 화살표가 지나는 원소들의 곱이 합을 빼어 절댓값을 취하면 된다.

 

사진에 보면 x는 x좌표이고 y는 y좌표를 말한다.

 

한 가지 주의해야 할 점은 마지막에 첫 번째 (x, y) 좌표를 꼭 추가해주어야 한다.

 

 

그래서 저는 plus와 minus 변수를 사용하여 청색 화살표와 적색 화살표를 더해 모아주어

아래의 코드와 같이 구현했다.

 

 


 

⊙ 문제 풀이

 

import sys
import math

input = sys.stdin.readline

N = int(input())

shoelaces = list()

for _ in range(N):
    x, y = map(int, input().split())
    shoelaces.append((x, y))

shoelaces.append(shoelaces[0])

plus = 0
minus = 0

for i in range(len(shoelaces)-1):
    plus += (shoelaces[i][0] * shoelaces[i+1][1])
    minus += (shoelaces[i][1] * shoelaces[i+1][0])

result = math.fabs(0.5 * (plus-minus))
print("%.1f" % result)

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형