:pencil2:코드

import sys
sys.stdin = open("input.txt")
input = sys.stdin.readline


n = int(input())
ls = []
for _ in range(n):
    l, h = map(int, input().split())
    ls.append((l, h))

ls.sort(key=lambda x : x[0])
stack = []
if n == 1:
    print(ls[0][1])
else:
    for i in range(n):
        if i == 0 or i == 1:
            stack.append(ls[i])
        else:
            check = True
            while check:
                if len(stack) >= 2:
                    if stack[-1][1] <= stack[-2][1] and stack[-1][1] < ls[i][1]:
                        stack.pop()
                    else:
                        check = False
                else:
                    break
            stack.append(ls[i])
    print(ls)
    print(stack)
    answer = 0
    for i in range(len(stack)):
        answer += stack[i][1]
        if i != len(stack) - 1:
            answer += min(stack[i][1], stack[i + 1][1]) * (stack[i + 1][0] - stack[i][0] - 1)
    print(answer)

:star:풀이

거의 20번의 시도 끝에 풀어낸 문제이다 ㅜㅜ

실버2임에도 불구하고 많이 고생했다 흑흑

오목한 부분 체크에 대한 구현이 핵심이였다!

스택문제를 풀면 항상 느끼는데 은근 아이디어가 잘 떠오르지 않는 문제들이 많다.

화이팅!!!!

2304

댓글남기기