01.19

- 문제: 

https://itcrowd2016.tistory.com/84

- 풀이:

큰 전체 삼각형에서 작은 삼각형을 빼서 넓이를 구하는 것으로 생각했다. 처음엔 단순히 저 예제에만 적합한 코딩을 해서 애를 먹었다. 최소 최대로만 값을 구해서 계산했었는데 그렇게 풀면 아래와 같은 예제는 조건이 충족되지 않는다. 따라서 참외밭은 ㄱ자 모양이나 ㄴ자 모양, 출발 꼭지점의 시작점은 어디서든 가능, 반시계 방향으로 돎을 따져서 생각해야한다. 

최대로 가장 긴 가로 세로에 붙어있는 양 옆의 변 길이를 구해서 빼는 방식으로 구현해보았다. 그런데 런타임 에러가 나서 확인해보니 %6을 붙여주면 에러가 나지 않았다. 인덱스가 6이상이면 에러가 날뿐만 아니라 시작점을 알 수 없는 상태니 6이내의 값으로 구해야하기 때문이다. 

 

n = int(input())

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

w = 0; w_idx = 0
l = 0; l_idx = 0
for i in range(len(bat)):    
    if bat[i][0] == 1 or bat[i][0] == 2:
        if w < bat[i][1]:
            w = bat[i][1]
            w_idx = i
    elif bat[i][0] == 3 or bat[i][0] == 4:
        if l < bat[i][1]:
            l = bat[i][1]
            l_idx = i
            
 # 가장 긴 각 세로변과 가로변에 붙어있는 가로 세로를 절대값으로 빼면 작은 사각형의 세로와 가로를 구할 수 있음

W = abs(bat[(w_idx-1)%6][1] - bat[(w_idx+1)%6][1])
L = abs(bat[(l_idx-1)%6][1] - bat[(l_idx+1)%6][1])  # %6을 안해주니까 런타임 에러가 났다. 인덱스가 6보다 크면 안되고 어떤 점에서 시작할지 모르기때문에 %6을 넣어야한다

print(((w*l) - (W*L))*n)

+ Recent posts