1. 문제
https://www.acmicpc.net/problem/1198
1198번: 삼각형으로 자르기
볼록 다각형이 있고, 여기서 3개의 연속된 점을 선택해서 삼각형을 만든다. 그 다음, 만든 삼각형을 다각형에서 제외한다. 원래 다각형이 N개의 점이 있었다면, 이제 N-1개의 점으로 구성된 볼록
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# n : 다각형 점의 수
n = int(input())
# n_l : 다각형 점 좌표 리스트
n_l = []
for i in range(n):
n_l.append(list(map(int, input().split())))
max_area = 0
def area_find(target_list, p_l, depth):
global max_area
if depth == 3:
a = (((p_l[0][0] - p_l[1][0]) ** 2) + ((p_l[0][1] - p_l[1][1]) ** 2)) ** 0.5
b = (((p_l[0][0] - p_l[2][0]) ** 2) + ((p_l[0][1] - p_l[2][1]) ** 2)) ** 0.5
c = (((p_l[1][0] - p_l[2][0]) ** 2) + ((p_l[1][1] - p_l[2][1]) ** 2)) ** 0.5
s = (a + b + c) / 2
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
max_area = max(max_area, area)
return
for i in range(depth, n):
p_l.append(n_l[i])
area_find(target_list, p_l, depth + 1)
p_l.pop()
area_find(n_l, [], 0)
print(max_area)
3. 후기
- 문제는 주어진 좌표들을 이용한 삼각형 중 가장 넓이가 큰 삼각형의 넓이를 출력하는 문제이다.
삼각형의 넓이를 구하는 방법은 여러가지가 있겠지만, 해당 코드에서는 sin, cos의 관계를 이용한 넓이 공식을 사용하여 구하였다.
문제을 해결하며 알고리즘을 해결하는 능력에 수학적인 부분이 꽤나 많은 영향을 미친다는 생각을 하게 되었다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1254) (0) | 2023.03.15 |
---|---|
(Python)백준 코딩테스트 연습 - 사람의 수(1206) (0) | 2023.03.14 |
(Python)백준 코딩테스트 연습 - 부분수열의 합(1182) (0) | 2023.03.10 |
(Python)백준 코딩테스트 연습 - 접두사(1141) (0) | 2023.03.09 |
(Python)백준 코딩테스트 연습 - 한 줄로 서기(1138) (0) | 2023.03.08 |