[BOJ] 2477 | 참외밭

Gaanii·2024년 10월 9일
0

Problem Solving

목록 보기
11/210
post-thumbnail

아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀

BOJ 로고



풀이과정


기본적인 아이디어는 가장 큰 사각형에서 가장 작은 사각형의 넓이를 빼는 것 !

작은 사각형의 넓이를 구하는게 관건인 문제였다.

풀이과정

입력을 모두 받은 후에 가로방향에서 최장길이, 세로방향에서 최장길이를 찾아서 변수에 따로 저장해둔다.

이 때, 그때의 인덱스 값을 저장해둬야 함 !

가로를 먼저 생각해봤을때, 인덱스가 1인 160이 최장길이로 나오는데

이 때 인덱스 1을 기준으로 인덱스+1을 한 값은 30, 인덱스-1을 한 값은 50이다. 이를 빼서 절댓값을 취해주면 세로방향의 최단길이가 나온다.

세로도 똑같이 생각을 해보면 인덱스가 0인 50이 최장길이로 나오고,

인덱스 0을 기준으로 인덱스+1을 한 값은 160, 인덱스-1을 한 값은 100이므로 이를 빼서 절댓값을 취해주면 가로방향의 최단길이인 60이 나온다

따라서 가로세로 방향의 최장길이의 곱과 최단길이의 곱을 뺀 후에 맨 처음 입력받은 k를 곱해주면 성공이다.


코드


k = int(input())

arr = [list(map(int, input().split())) for _ in range(6)]

min_w =  min_h = max_w = max_h = 0
maxw_idx = maxh_idx = 0

for idx, tmp in enumerate(arr):
    if tmp[0] == 1 or tmp[0] == 2:
        if max_w < tmp[1]:
            maxw_idx = idx
            max_w = tmp[1]

    elif tmp[0] == 3 or tmp[0] == 4:
        if max_h < tmp[1]:
            maxh_idx = idx
            max_h = tmp[1]

min_h = abs(arr[(maxw_idx - 1) % 6][1] - arr[(maxw_idx + 1) % 6][1])
min_w = abs(arr[(maxh_idx - 1) % 6][1] - arr[(maxh_idx + 1) % 6][1])

print (k * ((max_w * max_h) - (min_w * min_h)))


결과


2477맞았습니다

0개의 댓글