[프로그래머스] 주식가격 (Python) - 스택/큐

Yebin Lee·2022년 7월 8일
0

코테준비

목록 보기
7/12

야심차게 프로그래머스 스킬체크 Level2에 도전했다가 대차게 패배했다. 괜찮다.
더 성장해서 다음에는 성공하면 되니까 ❗

취업을 위해 공부를 하고는 있지만 이 방법이 맞나 싶다.
늦은 건 아닌지 걱정이 앞서고 몸은 잘 안 따라준다. 어쩌겠어, 부딪혀봐야지!


프로그래머스 [주식가격] 문제 보기


스킬체크에서 미처 풀지 못한 문제를 따로 공부해보았다. 타임어택 없이 코드를 생각하니 금방 떠올랐던 거 같다. 조급함이랑 부담감을 덜어서 그런가 ...


프로그래머스 [주식가격] 문제 풀이


def solution(prices):
    answer = [0] * len(prices)
    for i in range(len(prices)):
        for j in range(i+1, len(prices)):
            if prices[i]<=prices[j]:
                answer[i]+=1
            else:
                answer[i]+=1
                break
    return answer

처음은 브루트 포스(brute force) 알고리즘을 사용했다. 가장 간단하게 모든 값을 탐색하지만 시간 효율성은 그리 좋지 않은 코드다.

여기서 잠깐,

#1
if len(strList) != 0:
	print("list is not empty")
    
#2
if strList:
	print("list is not empty")

list가 비었는지 확인하는 방법으로 1번이 좋을까, 2번이 좋을까?
파이썬 다운 코드는 2번이다. 나는 이제껏 C를 더 많이 써왔기에 자꾸 1번처럼 코드를 짜게 되는데 문제를 풀면 풀수록 어서 파이썬 문법을 손에 익혀야겠다는 생각이 든다.


위를 참고해서 스택을 사용하는 방법을 떠올려보게 되었다.

def solution(prices):
    answer = [0] * len(prices)
    stack = []
    
    for i, data in enumerate(prices):
        while stack and data < prices[stack[-1]]:
            answer[stack[-1]] = i-stack[-1]
            stack.pop()
        stack.append(i)
    
    while stack:
        answer[stack[-1]] = len(prices) - stack[-1] - 1
        stack.pop()
    
    return answer

두 번째 코드가 첫 번째 코드에 비해 효율성 통과 시간이 현저히 낮은 것을 확인할 수 있다. 비록 혼자의 힘으로 풀지는 못했지만, 이것저것 찾아보며 공부하는 시간이 된 것 같다. 이렇게 공부하다 보면 혼자 풀 날도 오겠지 ❗


안녕 !

0개의 댓글