
내 풀이
def solution(prices):
answer = []
prices_len = len(prices)
answer.append(0)
for i in range(prices_len-2,-1,-1):
for j in range(i+1,prices_len):
price_down = False
if prices[i] > prices[j]: #가격이 떨어짐
answer.append(j-i)
price_down = True
break
if price_down == False :
answer.append(j-i)
return list(reversed(answer))
예제 처럼 [1,2,3,2,3]이 들어왔을 때 마지막 주식가격(3)은 가격이 떨어지는 시간이 0초 이므로 일단 0을 추가해주고 시작했습니다.
리스트의 인덱스를 가리키는 i와 i보다 1이상 큰 j를 이용하여 price[i] > price[j]라면 주식 가격이 떨어진것이므로 인덱스의 차이(j-i)만큼 초가 흘렀으니 j-i를 answer 리스트에 추가해줍니다.
두번째 for문에서 price[i]가 항상 더 컸다면 한번도 주식 가격이 떨어지지 않은 것이고, 주식이 떨어지지 않은 시간 j-i를 answer 리스트에 추가해줍니다.
다른 사람 풀이
def solution(prices):
stack = []
answer = [0] * len(prices)
for i in range(len(prices)):
if stack != []:
while stack != [] and stack[-1][1] > prices[i]:#가격이 떨어짐
past, _ = stack.pop()
answer[past] = i - past
stack.append([i, prices[i]])
for i, s in stack:
answer[i] = len(prices) - 1 - i
return answer
stack은 주식 가격이 처음으로 떨어지는 지점을 아직 못찾은 가격의 index 들을 저장하고 있습니다.
while 문은 stack에 남은 것들이 i번째에 처음으로 가격이 떨어지는가?를 검사합니다.
떨어졌다면 stack 에서 pop처리 후 stack에 저장한 index와 현재 index의 차이만큼 시간이 흘렀다고 여겨 answer에 저장합니다.
마지막 for문에서 stack에 원소가 있다면 한번도 떨어지지 않은 주식가격이므로 전체 (prices 길이-1)에서 stack의 인덱스만큼 빼주어(가격이 떨어지지 않은 초 시간) answer에 저장합니다.
스택에 주식가격의 인덱스를 저장하기가 뽀인트 발상이였네용
'Algorithm 뽀개기 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Lvl1][Java][Javascript] 자연수 뒤집어 배열로 만들기 (0) | 2023.08.27 |
---|---|
[Python] [프로그래머스] - 스킬트리 (0) | 2021.10.02 |
[Python] [프로그래머스] - 구명보트 (0) | 2021.09.19 |
[Python][프로그래머스] - 거리두기 확인하기 (0) | 2021.08.11 |
[Python][프로그래머스] - 더맵게 (0) | 2021.08.03 |