문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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에 추가하는 것보다는 리스트의 값을 바꾸는 방식으로 효율성을 높인 것 같다.