초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
prices
[1, 2, 3, 2, 3]
return
[4, 3, 1, 1, 0]
def solution(prices):
answer = []
for i in range(len(prices)):
cnt = 0
for j in range(i+1, len(prices)):
cnt += 1
if prices[i] > prices[j]:
break
answer.append(cnt)
return answer
✅ 각 prices 리스트에 있는 데이터를 체크하기 위한 반복문 구현
def solution(prices):
answer = [0 for a in range(len(prices))]
for i in range(len(prices)):
for j in range(i+1, len(prices)):
answer[i] += 1
if prices[i] > prices[j]:
break
return answer
✅ answer [] = prices 의 길이만큼 0으로 된 리스트를 만든다
int[] answer = new int[prices.length]
Jasvascript를 공부하면서 알고리즘 구조를 구체적으로 모르는 상태에서 문제를 풀다보디 출제의도를 벗어난 것 같아서 스택을 사용하여 문제를 풀 수 있는 방법을 찾아봤다.
code
def solution(prices):
answer = [0]*len(prices)
stack = []
for i in range(len(prices)):
while stack and prices[stack[-1]] > prices[i]:
j = stack.pop()
answer[j] = i - j
stack.append(i)
while stack:
j = stack.pop()
answer[j] = len(prices) - j - 1
return answer
step 1
def solution(prices):
answer = [0]*len(prices)
stack = []
# prices = [1,2,3,2,3]
# stack = [0,1,2,3,4]
# answer = [0,0,0,0,0]
for i in range(len(prices)):
stack.append(i)
return answer
step 2
def solution(prices):
answer = [0 for _ in range(len(prices))]
stack = []
# prices = [1,2,3,2,3]
# stack = [0,1,3,4]
# answer = [0,0,1,0,0]
for i in range(len(prices)):
while stack and prices[stack[-1]] > prices[i]:
j = stack.pop()
answer[j] = i - j
stack.append(i)
return answer
while stack and prices[stack[-1]] > prices[i]:
j = stack.pop()
answer[j] = i - j
✅ j = stack.pop()
✅ answer[j] = i - j
while stack:
# stack = [0,1,3,4]
# answer = [0,0,1,0,0]
j = stack.pop()
answer[j] = (len(prices) - 1) - j
answer[4] = ( 5 - 1 ) - 4 == 0
answer[3] = ( 5 - 1 ) - 3 == 1
answer[1] = ( 5 - 1 ) - 1 == 3
answer[0] = ( 5 - 1 ) - 0 == 4
[4, 3, 1, 1, 0]