기록하고 까먹지 말기

2166 본문

전공/백준

2166

yha97 2023. 3. 23. 09:56

날짜 : 2023. 03. 23

사용 언어 : python

 

문제

 

 

코드

import sys

n = int(sys.stdin.readline())
graph = list()

# 삼각형 넓이 구하기
def tri(t1, t2, t3):
    total = (t1[0]*t2[1] + t2[0]*t3[1] + t3[0]*t1[1]) - (t2[0]*t1[1]+t3[0]*t2[1]+t1[0]*t3[1])
    return total


res = 0
for _ in range(n):
    x, y = map(int, sys.stdin.readline().split())  # 좌표 입력
    graph.append([x, y])

fir = 0
sec = 1
thd = 2
while thd < n:
    res += tri(graph[fir], graph[sec], graph[thd])
    sec = thd
    thd += 1
print(abs(round(res*0.5, 2)))

 

 

풀이

- 신발끈 공식을 사용해서 세 점의 좌표로 각 삼각형의 넓이를 구하는 함수를 작성한다.

- 한 점을 설정하고 그 점을 기준점으로 설정하여 두 점끼리 연결하면서 삼각형의 넓이를 더해간다.

- 이 때, 함수 내에서 절대값을 취함으로써 삼각형의 넓이를 구하는 것이 아닌, 전부 다 더한 다음 절대값을 취한다.

 

 

알게된 점

- 신발끈 공식을 고등학교때 알고 있었는데 구체적인 사용방법은 까먹어서 찾아본 다음 풀이했다.

- 넓이는 항상 양수의 양상을 띄지만 오목한 케이스의 경우 일부를 빼야 하는 케이스가 발생할 수 있기 때문에 전부 다 더한 다음 그 값에 절대값을 씌움으로써 답을 구할 수 있었다.

 

 

참고 사이트

- https://kibbomi.tistory.com/204

 

boj, 백준) 2166. 다각형의 면적 ( C / C++ )

1. 문제 링크 www.acmicpc.net/problem/2166 2166번: 다각형의 면적 첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지

kibbomi.tistory.com

- 신발끈 공식 : https://ko.wikipedia.org/wiki/신발끈_공식

 

위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 위키백과 우리 모두가 만들어가는 자유 백과사전문서 629,320개와 최근 기여자 1,642명 사랑방 다른 분들과 의견을 교환해봐요! 질문방 지침으로 해소되지 않는

ko.wikipedia.org

 

'전공 > 백준' 카테고리의 다른 글

1107  (0) 2023.03.26
2573  (0) 2023.03.24
11404  (0) 2023.03.22
1011  (0) 2023.03.21
14503  (0) 2023.03.21