접근

이번 문제는 쉬운 문제인데 정답률이 낮아서 조금 의아한 문제였다.

예시로 위와 같은 오각형이 주어졌을 때, 다음과 같은 과정을 통해 면적을 구해줄 수 있다.

위의 오각형은 왼쪽의 세개의 사다리꼴을 더해준 뒤, 오른쪽의 두개의 사다리꼴의 면적을 빼줌으로써 구할 수 있다.

하지만 면적을 더하고 빼기 위해 굳이 무언가 다른 조치를 취해줄 필요는 없다.

사다리꼴의 면적을 구하는 공식을 위의 문제에 적용해보면 다음과 같다.

$$ 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))

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기