스택
그리디
import sys
n = int(sys.stdin.readline().rstrip())
building = []
answer = 0
stk = []
for i in range(n) :
height = int(sys.stdin.readline().rstrip())
building.append((i,height))
for i in range(n) :
now_number , now_height = building[i]
# i번째 빌딩차례 때 stk(내 앞에 있는 빌딩들) 중
# 나를 지켜볼 수 있는 (나보다 큰 애들) 건물만
# stk에 남겨두고 , 아니라면 pop
# (pop 대상은 나보다 작거나 같은 애들 == 내가 더 크거나 같은 애들)
while stk and stk[-1][1] <= now_height :
stk.pop()
answer+=len(stk)
stk.append((now_number, now_height))
print(answer)
6198
- (2022 0503 풀이
출처 : https://lakelouise.tistory.com/62?category=1006962
n = int(input())
arr = [int(input()) for i in range(n)]
stk = []
ans = 0
#stack에 담기게 되는 것 :
# 1) 나보다 이전 건물
# 2) 나보다 작은 건물 (내가 더 크거나 같음)
for i in range(n):
while stk and stk[-1] <= arr[i]:
# 내 이전 건물 중에서
# 나보다 큰 건물 만나면 stop
stk.pop()
stk.append(arr[i])
ans += len(stk) -1
# 나를 이전 건물로 윗 줄에서 등록해주니깐
# 나 자신은 빼줘야지 -1
print(ans)
옛날에 느낀 반성점 (2022 0503)