티스토리 뷰

 

2477번: 참외밭

첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지

www.acmicpc.net


1. 문제 내용

 

 

2. 접근 방식

  • 육각형을 두 덩어리로 쪼개 각각 넓이를 구하자.

육각형을 두 덩어리로 쪼개는 두 가지 케이스

1번째와 2번째로 입력받은 사격형의 넓이와 4번째와 5번째로 입력받은 사각형 넓이를 각각 구한다. 그러면 처음에 입력받기 시작하는 임의의 꼭짓점 위치에 따라서 위 그림처럼 2가지 방법으로 육각형이 쪼개진다.

 

  • 각 덩어리의 넓이를 더할 때와 뺄 때를 구분하기 위해 가장 긴 가로와 세로을 가진 사각형의 넓이를 구하자.

위 그림에서 1번째 케이스는 두 사각형을 합해야 하지만, 2번째 케이스는 초록색 사각형에서 주황색 사각형 넓이를 빼야 한다. 만약 초록색과 주황색 두 덩어리의 합이 전체 사각형(두 번째 케이스의 초록색 사각형) 크기보다 작다면 1번째 케이스이고, 크거나 같다면 2번째 케이스이다.

그럼 가장 큰 사각형의 가로와 세로는 어떻게 구할까? 이는 간단하다. 위 그림은 각 변의 방향을 나타낸 그림이다. 그림에서 확인할 수 있듯이 가장 긴 가로와 세로는 각 변의 방향을 입력 받을 때 딱 한 번씩만 입력받으므로, 방향이 중복되지 않는 것을 찾으면 된다.

 

 

3. 정답 코드

def input_data():
    n = int(input())

    tmp = []
    tmp2 = [[] for _ in range(4)]
    for _ in range(6):
        d, length = map(int, input().split())
        tmp.append(length)
        tmp2[d - 1].append(length)

    return n, tmp, tmp2


def get_maxArea():
    size = 1
    for x in data2:
        if len(x) == 1:
            size *= x[0]
    return size


k, data, data2 = input_data()
maxArea = get_maxArea()

mass = []
for i in range(0, 6, 3):
    mass.append(data[i] * data[i+1])

area = sum(mass) if sum(mass) < maxArea else max(mass) - min(mass)
print(area * k)
728x90