본문 바로가기
Algorithm(CodeTree, Python)/완전탐색2

[코드트리 물체 단위로 완전탐색] 삼각형 만들기 python

by kurooru 2022. 12. 15.
# n 입력
n = int(input())
# pos_list
pos_list = list()
# pos_list 입력
for _ in range(n):
    pos_list.append(tuple(map(int, input().split())))

# 함수들
# x_parallel(a, b, c):
def x_parallel(a, b, c):

    # x1, y1 언팩킹
    x1, y1 = pos_list[a]
    # x2, y2 언팩킹
    x2, y2 = pos_list[b]
    # x3, y3 언팩킹
    x3, y3 = pos_list[c]

    # 한 쌍이라도 y값이 같은 쌍이 있으면 통과
    return y1 == y2 or y2 == y3 or y1 == y3

# y_parallel(a, b, c):
def y_parallel(a, b, c):

    # x1, y1 언팩킹
    x1, y1 = pos_list[a]
    # x2, y2 언팩킹
    x2, y2 = pos_list[b]
    # x3, y3 언팩킹
    x3, y3 = pos_list[c]

    # 한 쌍이라도 x값이 같은 쌍이 있으면 통과
    return x1 == x2 or x2 == x3 or x1 == x3

# calc(a, b, c)
def calc(a, b, c):

    # x1, y1 언팩킹
    x1, y1 = pos_list[a]
    # x2, y2 언팩킹
    x2, y2 = pos_list[b]
    # x3, y3 언팩킹
    x3, y3 = pos_list[c]

    # max_x, min_x, max_y, min_y
    max_x, min_x, max_y, min_y = max(x1, x2, x3), min(x1, x2, x3), max(y1, y2, y3), min(y1, y2, y3)

    # curr_area
    # * 삼각형의 넓이지만 2배할 예정이므로, 어짜피 직사각형의 넓이와 같음 * 
    curr_area = (max_x - min_x) * (max_y - min_y)

    # 반환
    return curr_area

# 설계
# max_area
max_area = 0

# 완전 탐색 시작
for i in range(n-2):
    for j in range(i+1, n-1):
        for k in range(j+1, n):
            # x축에 평행이고, y축에 평행인 변이 있으면
            if x_parallel(i,j,k) and y_parallel(i,j,k):
                # max_area 업데이트
                max_area = max(max_area, calc(i,j,k))

# 출력
print(max_area)