본문 바로가기

백준

[백준] 2477번 - 참외밭 (파이썬)

반응형

1. 문제

 

2. 코드

k = int(input())
l = []
l_no = []
max_h = 0
max_w = 0

for m in range(6):
    i, j = map(int, input().split())
    l.append(j)
    if i >= 3 and max_h < j:
        max_h = j
        max_h_idx = m
    elif i <= 2 and max_w < j:
        max_w = j
        max_w_idx = m

l_no.append(max_w_idx)
l_no.append(max_h_idx)

temp = max_w_idx - 1
if temp < 0:
    temp += 6
l_no.append(temp)
temp = max_w_idx + 1
if temp > 5:
    temp -= 6
l_no.append(temp)
temp = max_h_idx - 1
if temp < 0:
    temp += 6
l_no.append(temp)
temp = max_h_idx + 1
if temp > 5:
    temp -= 6
l_no.append(temp)

square = 1
for i in range(6):
    if i not in l_no:
        square *= l[i]

print((max_w * max_h - square)*k)

 

3. 풀이

그다지 좋은 코드는 아닌 것 같지만,,,

생각해보면 항상 큰 직사각형에서 작은 직사각형이 빠진 형태로 생긴 것을 알 수 있다.

가장 긴 가로, 가진 긴 세로를 찾아서 큰 사각형의 넓이를 구해주고, 비어있는 작은 사각형 부분의 넓이를 구해서 빼주는 걸로 했다.

이 때, 작은 사각형의 세로와 가로 길이는 가장 긴 가로, 가장 긴 세로와 맞닿지 않은 변이다.

따라서 가장 긴 가로, 가장 긴 세로, 그리고 이 두변과 맞닿아 있는 변들을 l_no 리스트에 넣어서 l_no에 없는 변들을 곱하여 작은 사각형 부분의 넓이(square)을 구했다.

 

728x90
반응형