일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 크루스칼
- 에라토스테네스의 체
- 다이나믹프로그래밍
- 자료구조
- 분할정복
- 플로이드-워셜
- 누적합
- GROUP BY
- 다시
- DFS
- 그리디
- 그래프 탐색
- 구현
- 재귀
- 시뮬레이션
- 다이나믹 프로그래밍
- DP
- 서브쿼리
- 해시
- 우선순위큐
- 그래프 이론
- 투포인터
- 트리
- MST
- join
- 브루트포스
- 백트래킹
- 수학
- 다익스트라
- BFS
- Today
- Total
기록하고 까먹지 말기
2166 본문
날짜 : 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