접근
이번 문제는 쉬운 문제인데 정답률이 낮아서 조금 의아한 문제였다.
예시로 위와 같은 오각형이 주어졌을 때, 다음과 같은 과정을 통해 면적을 구해줄 수 있다.
위의 오각형은 왼쪽의 세개의 사다리꼴을 더해준 뒤, 오른쪽의 두개의 사다리꼴의 면적을 빼줌으로써 구할 수 있다.
하지만 면적을 더하고 빼기 위해 굳이 무언가 다른 조치를 취해줄 필요는 없다.
사다리꼴의 면적을 구하는 공식을 위의 문제에 적용해보면 다음과 같다.
$$ area = \frac{(윗변 + 아랫변) * 높이}{2} = \frac{(y2 + y1) * (x2 - x1)}{2} $$
x2 - x1 은 양수이지만 x5 - x4 는 음수여서 자연적으로 빼주어야 하는 면적에는 음수 기호가 적용되게 된다.
심지어 이는 위 문제와 같이 1사분면 뿐만 아니라 2, 3, 4분면에서도 동일하게 계산해도 똑같이 계산이 된다.
코드를 보면 아래와 같다.
코드
import sys
n = int(sys.stdin.readline())
point = []
for _ in range(n):
a, b = map(int, sys.stdin.readline().split())
point.append([a, b])
xold, yold = point.pop(0)
point.append([xold, yold]) # 시작점을 선택해준 뒤, 시작점을 다시 맨 뒤에 추가해준다.
area = 0
while point:
nx, ny = point.pop(0)
area += (yold + ny) * (nx - xold) / 2 # 사다리꼴의 넓이 추가
xold, yold = nx, ny
print("%.1f" % abs(area))
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 17386번: 선분 교차 1 (Python) (0) | 2021.05.06 |
---|---|
백준 11758번: CCW (Python) (0) | 2021.05.06 |
백준 1949번: 우수 마을 (Python) (0) | 2021.05.05 |
백준 2533번: 사회망 서비스(SNS) (Python) (0) | 2021.05.05 |
백준 2213번: 트리의 독립집합 (Python) (0) | 2021.05.05 |
최근댓글