주식 가격

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 유지된 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices return
[498,501,470,489] [2,1,1,0]

입출력 예 설명

  • 1초 시점의 ₩498은 2초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
  • 2초 시점의 ₩501은 1초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
  • 3초 시점의 ₩470은 최종 시점까지 총 1초간 가격이 떨어지지 않았습니다.
  • 4초 시점의 ₩489은 최종 시점까지 총 0초간 가격이 떨어지지 않았습니다.

나의 풀이

1
2
3
4
5
6
7
8
9
10
def solution(prices):
ls = []
for i, price in enumerate(prices):
cnt = 0
for p in prices[i+1:]:
cnt += 1
if price > p:
break
ls.append(cnt)
return ls

효율성 줄이기 실패…

정답

1
2
3
4
5
6
7
8
9
10
def solution(prices):
answer = [0] * len(prices)

for i in range(len(prices)-1):
for j in range(i, len(prices)-1):
if prices[i] > prices[j]:
break
else:
answer[i] +=1
return answer

출처

나의 풀이에는 for의 iterator에 list의 값을 넣었지만

정답은 인덱스 만을 이용하여 price list를 건드리지 않고 값을 뽑아내어 풀었다.

또한 list에 추가하는 것보다는 리스트의 값을 바꾸는 방식으로 효율성을 높인 것 같다.

Share