각 요소값을 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
을 빼준다.
수학적인 능력이 부족한지 헷갈리는 부분이 많은 느낌이다.
지경이 넓어지기 위해 힘들더라도 열심히 해봐야겠다.