코팅테스트/백준 문제 모음

백준 2477번 파이썬 문제풀이(참외밭)

유지광이 2022. 1. 28. 23:58


 

이 문제도 보다보다 너무 답이 안보여서 힌트를 봤다. 힌트는 가장 긴 세로 및 가장 긴 가로길이를 곱하면 큰 전체 사각형의 넓이가 나온다. 여기서  가장 긴 변들과 인접해 있지 않은 변을 2개 찾은 후 그 2개의 길이를 이용해 넓이를 구하면 빈 사각형이 되므로 전체 사각형 넓이에서 그 넓이만큼 빼주면 된다.

 

(출처: https://itcrowd2016.tistory.com/84)

K = int(input())
max_height = 0  # 가장 긴 높이를 저장할 변수
max_width = 0  # 가장 긴 가로길이를 저장할 변수
max_width_index = 0  # 가장 긴 가로길이의 인덱스를 저장할 변수
max_height_index = 0  # 가장 긴 높이의 인덱스를 저장할 변수
info = []  # 변의 정보들을 저장할 리스트
for i in range(6):
    temp = list(map(int, input().split()))
    info.append(temp)
    if temp[0] == 1 or temp[0] == 2:  # 만약 가로 길이라면
        if max_width < temp[1]:  # 해당 길이가 가장 길다면
            max_width = temp[1]  # 그 길이를 가장긴 가로로 저장한 후
            max_width_index = i  # 그에 해당하는 인덱스를 저장
    else:
        if max_height < temp[1]:  # 해당 길이가 가장 길다면
            max_height = temp[1]  # 그 길이를 가장긴 세로로 저장한 후
            max_height_index = i  # 그에 해당하는 인덱스를 저장

# 그 후 가장 긴 가로 및 세로와 인접한 변 2개와 가장긴 가로와 세로 총 4개를 새로운 리스트에 저장한다.
index_list = [info[max_height_index - 1], info[(max_height_index + 1) % 6], info[max_width_index - 1],
              info[(max_width_index + 1) % 6]]

product = 1  # 곱을 저장할 변수
for i in info:  # 입력받은 변들 중에
    if i not in index_list:  # 만약 새로운 리스트에 저장한 변 4개 중에 없다면 빈 사각형이므로
        product *= i[1]  # 그 넓이를 변수에 저장한다.

result = (max_width * max_height - product) * K  # 전체 큰 직사각형 넓이에서 빈 사각형 넓이를 빼준 후 K를 곱한다.
print(result)