각 요소값을 1초로 생각하여 몇초동안 이 가격이 떨어지지 않는지 구하는 문제이다.
prices = [1, 2, 3, 2, 3]
return = [4, 3, 1, 1, 0]
각 요소값보다 작은 숫자가 등장하는 시간이 언제인지를 구하는 문제라고 생각하면 편하다.예를들어
0번째 요소값인1보다 작은 숫자는 없기 때문에 끝까지 유지되어0번째 요소값부터1번째 요소값까지를1초로 생각하고 마지막 요소값까지4초를 유지하게 된다.
이런 방식으로 각각의 숫자 미만의 숫자가 나올때까지의 시간을 구하면된다.
그리고 마지막에는 유지되는 시간이 없기 때문에0을 출력하면 된다.
def solution(prices): answer = [] for i in range(len(prices)) : se = 1 len_p = len(prices) while True : if i+se == len_p : if se == 1 : answer.append(0) else : answer.append(se-1) break elif prices[i] > prices[i+se] : answer.append(se) break elif prices[i] <= prices[i+se] : se += 1 continue return answer이게 왜 됨? 아무튼
0번째 값이1번째 값 보다 크다면se에1을 더해줘서 다음 요소값을 호출하게 한다.
- 만약 언제가 올 다음 값이
0번째 요소값보다 작아진다면se값을 그대로answer로 넣어준다.if i+se == len_p :
se자체가prices의 길이와 같을 경우에는 리스트 전체가 끝까지 돌아간 경우이기 때문에0을 넣어주고 마무리한다.- 아닌 경우에는 끝까지 자신보다 작은 값을 찾지 못한 경우이기 때문에 마무리가 된다.
- 이 경우 자기자신은0초이기 때문에1을 빼준다.
수학적인 능력이 부족한지 헷갈리는 부분이 많은 느낌이다.
지경이 넓어지기 위해 힘들더라도 열심히 해봐야겠다.