PS
BOJ 2304
plr3270
2021. 11. 14. 21:25
기둥이 되는 것을 구하는건 되게 쉬웠다
하지만 기둥을 가지고 넓이를 구하는걸 2시간 걸려서 풀었다..
그래도 득은 있었다고 생각함
소스코드
n = int(input())
ls = []
for i in range(n):
ls.append(list(map(int,input().split())))
ls.sort(key=lambda x : x[0])
stack = []
for i in range(n):
if len(stack) == 0:
stack.append(ls[i])
elif stack[-1][1] <=ls[i][1]:
if len(stack) == 1 or stack[-2][1] <= stack[-1][1]:
stack.append(ls[i])
else:
while not (len(stack) == 1 or stack[-2][1] <= stack[-1][1] or stack[-1][1] > ls[i][1]):
stack.pop()
stack.append(ls[i])
else:
stack.append(ls[i])
stack1 = stack[::-1]
if len(stack) == 1:
print(stack[0][1])
else:
s = 0
ah = 0
h = 0
bh = 0
saveA = []
for i in range(len(stack)):
if i == 0:
saveA = stack[i]
continue
if stack[i][1] > saveA[1]:
s+= saveA[1] * (stack[i][0]-saveA[0])
saveA = stack[i]
elif stack[i][1] == saveA[1]:
pass
else:
pass
ah = saveA[0]
h = saveA[1]
for i in range(len(stack1)):
if i == 0:
saveA = stack1[i]
continue
if stack1[i][1] > saveA[1]:
s+= saveA[1] * (saveA[0]-stack1[i][0])
saveA = stack1[i]
elif stack1[i][1] == saveA[1]:
pass
else:
pass
bh = saveA[0]
s+=(bh-ah+1)*h
print(s)