알고리즘 공부(C++)

2477 참외밭

혀니리리 2022. 8. 18. 16:09
728x90

2477번: 참외밭 (acmicpc.net)

 

2477번: 참외밭

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

www.acmicpc.net

N = int(input())
lst=[]
x, y = 0, 0
for i in range(6):
    a, b = map(int, input().split())
    lst.append([a, b])
for i in range(6):
    if lst[i][0] == 4 or lst[i][0] == 3:
        if lst[i][1] > y:
            y = lst[i][1]
    elif lst[i][0] == 2 or lst[i][0] == 1:
        if lst[i][1] > x:
            x = lst[i][1]
for i in range(6):
    if lst[i][0] == lst[(i + 2) % 6][0]:
        if lst[(i + 1) % 6][0] == lst[(i + 3) % 6][0]:
            small = lst[(i + 1) % 6][1] * lst[(i + 2) % 6][1]
print(N * (x * y - small))

오랜만에 또 안 보고 맞은 문제,, 하지만 엄청 오래걸림 거의 한시간 근접

육각형이고 방향도 정해져있고 그 모양도 한정되어있다는 것이 힌트였고..

연속해서 등장하는 숫자들이 같을때 그것으로 작은 밭크기를 구해야 했었다.

계속 고민을 하다가.. i == (i % 6) + 2 and (i+1) % 6 == (i+3) % 6같은 식으로 하면 쉽게 구할 수 있다는 것을 깨달음..

아이디어를 빨리 떠올리는 것이 중요한 것 같다.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

백준 15649 N과 M(1)  (0) 2022.08.24
1018 체스판 다시 칠하기  (0) 2022.08.22
1181 단어 정렬  (0) 2022.08.17
11650 좌표 정렬하기  (0) 2022.08.16
10845 큐  (0) 2022.08.16