출처: 백준 2477번 참외밭
참외밭의 모양이 얼마나 회전한 ㄱ
모양일지 모른다는 것이 해당 문제의 어려움이었다.
가로, 세로 가장 긴 변으로 그려지는 큰 사각형에서 밭에 포함되지 않는 작은 사각형을 빼주면 쉽게 밭의 넓이를 구할 수 있다.
가로, 세로 가장 긴 변은 max
를 이용해서 찾으면 된다.
밭의 여러 모양을 그리면서 확인해 보니, 밭에 포함되지 않는 작은 사각형의 변들은 가장 긴 변들과 일정한 간격을 두고 있음을 알 수 있었다.
밭의 모든 변을 한 리스트에 저장하면, 작은 사각형의 세로 변은 가장 긴 가로변과 3만큼 index
차이가 난다. 작은 사각형의 가로 변의 경우는 가장 긴 세로변과 마찬가지로 3만큼 index
차이가 난다.
이를 이용하면, 쉽게 밭에 포함되지 않는 작은 사각형의 넓이를 구하고 최종적으로 밭의 넓이를 구할 수 있다.
K = int(input())
x = []
y = []
xy= []
for i in range(6):
direc,length = map(int,input().split())
if direc < 3:
x.append(length)
else:
y.append(length)
xy.append(length)
x_max = max(x)
y_max = max(y)
x_min = xy[xy.index(y_max)-3]
y_min = xy[xy.index(x_max)-3]
print(K*(x_max*y_max-x_min*y_min))
문제를 처음 풀 때에는, 빼야 하는 작은 사각형의 변의 길이가 단순하게 min
값으로 주어진다고 착각했었다. 실제로는 아닐 수도 있기 때문에, 풀이에서 적은 성질을 찾을 때까지 시간이 꽤 걸렸다.