[Programmers] 주식가격
🎈문제
https://programmers.co.kr/learn/courses/30/lessons/42584
💬설명
- for문을 두번 돌면 되는 문제
- 처음부터 끝까지 돌면서 각각에 대해 뒤에 있는 price들을 체크해준다.
- 데이터 크기도 그렇게 크지 않고 O(nlogn)에 풀수 있어서 효율성도 통과했다.
- 스택으로 풀면 시간이 더 단축된다. (두번째 풀이) (약 100ms -> 약 20ms)
👩💻코드
def solution(prices):
answer = []
for index, price in enumerate(prices):
answer.append(0)
for i in range(index + 1, len(prices)):
answer[-1] += 1
if prices[i] < price:
break
return answer
# stack으로 푼 경우
def solution(prices):
length = len(prices)
stack = [0] # 초기값 넣어주기 index 0
# 감소하지 않을 때 들어갈 수 있는 최대값으로 초기화
answer = [i for i in range(length - 1, -1, -1)]
# 1번째 값부터 끝까지 돌기
for i in range(1, length):
# stack의 top 값을(참고: 스택에 들어있는 값들은 증가하는 수열임)을 체크해서
# 감소하는 시점을 확인하고 만약 감소한다면 시간 간격을 계산해서 넣는다.
# 감소하지 않는다면 다음값 확인
while stack and prices[stack[-1]] > prices[i]:
top = stack.pop()
answer[top] = i - top
stack.append(i)
return answer
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 21609번 상어중학교 (0) | 2021.10.08 |
---|---|
[Programmers] 더 맵게 (0) | 2021.10.07 |
[Programmers] 다리를 지나는 트럭 (0) | 2021.10.07 |
[Programmers] 프린터 (0) | 2021.10.07 |
[Programmers] 기능개발 (0) | 2021.10.07 |