BOJ - 2477번 참외밭 (Python)

woga·2021년 1월 29일
0

python 풀이

목록 보기
26/27
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/2477

난이도

Silver 1


풀이 방법

틀린풀이 : 해당 문제 속 밭은 ㄱ모형으로 모양이 한정적이다. 심지어 육각형이라고 한정된 정보를 이용해 밭 크기를 구하는 것이다. 그럼 넓이를 구하려면 우리는 'ㅁ' 를 알면 된다. 'ㅁ'에서 작은 네모를 빼줄 때, 넓이를 알수 있다.

그치만 위와 같이 접근해서 푼다면, 4%에서 틀린다. 이유는 가장 작은 변이 우리가 필요한 변이 아니기 때문이다. 그래서 가장 큰 길이들의 인접변으로 가장 작은 네모 넓이를 구할 수 있는데 이 때, -%를 이용한다. 왜냐하면 해당 모형은 육각형으로 한정된 모양이기 때문이다.

통상적인 육각형 그림을 머리속에 그려본 후, 인덱스를 임시로 부여한다. 반시계 방향이라고 했으니 가장 중간 시작 변을 0으로 두고 왼쪽으로 1,2,3을 부여한다. 마지막 변의 인덱스는 5이다.
그럼 이때 0의 인접된 변의 인덱스는 1과 5인데 이를 어떻게 알 수 있냐면?
첫번째 인접변, (0+1) % 6 = 1
두번째 인접변, (0-1) % 6 = -1이다.
파이썬 배열에서는 음수(-n)가 끝에서 n번째 숫자를 뜻하기 때문에 -1 인덱스는 5 인덱스가 된다.


통과 코드


if __name__ == '__main__':
    N = int(input())
    arr = [list(map(int,input().split())) for _ in range(6)]

    max_width = 0
    max_height = 0
    max_width_idx = 0
    max_height_idx = 0
    for i in range(len(arr)):
        if arr[i][0] == 1 or arr[i][0] == 2:
            if arr[i][1] > max_width:
                max_width = arr[i][1]
                max_width_idx = i
        else:
            if arr[i][1] > max_height:
                max_height = arr[i][1]
                max_height_idx = i

    min_width = abs(arr[(max_width_idx-1) % 6][1] - arr[(max_width_idx+1) % 6][1])
    min_height = abs(arr[(max_height_idx-1) % 6][1] - arr[(max_height_idx+1) % 6][1])
    total_area = (max_height*max_width) - (min_height * min_width)
    print(total_area * N)

etc

틀렸습니다 코드


if __name__ == '__main__':
    N = int(input())
    arr = [list(map(int,input().split())) for _ in range(6)]

    max_W = 0
    max_H = 0
    min_W = 987654321
    min_H = 987654321
    for i in range(len(arr)):
        if arr[i][0] == 1 or arr[i][0] == 2:
            max_W = max(max_W, arr[i][1])
            min_W = min(min_W, arr[i][1])
        else:
            max_H = max(max_H, arr[i][1])
            min_H = min(min_H, arr[i][1])

    total_area = (max_W * max_H) - (min_W * min_H)
    print(total_area * N)
profile
와니와니와니와니 당근당근

0개의 댓글