def solution(prices):
length = len(prices) - 1
answer = []
stack = []
while prices :
temp = prices.pop()
count = 1
while stack and stack[len(stack)-1][0] >= temp :
_, temp_count = stack.pop()
count += temp_count
if stack : answer.append(count)
else : answer.append(length-len(prices))
stack.append([temp, count])
answer.reverse()
return answer
문제정리
n초 간의 주가를 초 단위로 기록한 배열 prices가 매개변수로 주어질 때, 각 초의 주가를 기준으로 해당 초 부터 n초 사이에 가격이 떨어지지 않은 시간은 몇 초인지 배열에 담아 return 하도록 solution 함수를 완성하세요.
다른사람들은 문제이해가 어려웠다고 하는데 나는 대충읽고 예제를 봐서 그런지 오래걸리지는 않았다 푸는데 오래걸렸을뿐,,,,,
풀이과정
정말 감이 안잡혀서 고민을 많이 했다.
스택/큐문제이여서 브루스 포스로 풀었을때 효율성문제가 일어날 수 있다고 생각했다.
따라서 뒤에서부터 가격을 확인하며 초에대한 가격정보를 스택에 유지해가며 확인하며 풀이해야 겠다고 생각했다.
그대로 스택에 넣을 경우 의미가 없다고 생각하였고 이전값을 확인 후 현재값보다 클 경우 스택에서 그값을 뺴버리는 방법을 사용했다
→ 현재의 값이 더작으므로 스택의 큰값이 의미가 없어진다.(다음값을 확인할때 더 빨리 탐색)
하지만 풀어보니 뺸 값에 대한 시간 유지를 안해줬다.
즉 스택에 [1,2,3] 이 있고 3을 pop했을 경우, 원래있던 1은 3초전에 있던 가격인데 3이 없어져서 2초전가격처럼된것이었다. 그래서 스택에 넣을때 위치정보를 함께 넣어줘서 해결했다.
풀이 후
O(n^2)으로도 풀 수있네?,,,,
하지만 접근은 괜찮은거같다.