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

2025. 3. 2. 11:37·✨ 공부 기록/알고리즘

아이디어 : 특정 가격을 기준으로 각각 수익권인지 아닌지를 묻는거라고 이해하면 쉬울 것 같다. 가격이 떨어지지 않은 기간은 그 다음 가격이 바로 떨어지더라도 1초는 기본으로 준다.(마지막 가격의 경우 무조건 0이 되는 것 같다)

 

# 첫 번째 시도

def solution(prices):
    times = [0] * len(prices)
    idx_list = []
    for i in range(len(prices)):
        times[i]+=1
        idx_list.append(i)
        for j in idx_list:
            try:
                if prices[j]<=prices[i+1]:
                    times[j]+=1
                else:
                    idx_list.remove(j)
            except:
                break
    times = [x-1 if x!= 1 else x for x in times]
    times[-1]=0
    return times

 

테스트 케이스만 통과할뿐 나머지는 줄줄이 실패라서 좀 더 잘 생각해봐야 할 것 같다.

 

# 두 번째 시도

 

가격이 떨어지지 않는다=더 작은 수가 나오지 않았다.

 

def solution(prices):
    count_list = [0]*len(prices)
    idx_list = []
    flag = prices[0]
    idx_list.append(0)
    for i in range(1,len(prices)):
        if flag > prices[i]:
            count_list[i-1]+=1
            idx_list.remove(i-1)
        flag = prices[i]  
        for j in idx_list:
            count_list[j]+=1
        idx_list.append(i)
            
    count_list[-1]=0
    return count_list

 

뭐가 문제일까? -> 바로 앞의(i-1) 케이스만 비교해서 그런 것 같다. 즉, 모든 앞쪽의 케이스에 대해서 비교를 해봐야 할 것 같다. 

 

테스트케이스 [2, 4, 6, 4, 2] -> [4, 2, 1, 1, 0]

 

# 세 번째 시도

def solution(prices):
    count_list = [0]*len(prices)
    idx_list = []
    flag = prices[0]
    idx_list.append(0)
    for i in range(1,len(prices)):
        flag = prices[i]
        for k in idx_list:
            if flag < prices[k]:
                if count_list[k]==0:
                    count_list[k]+=1
                idx_list.remove(k)  
                
        for j in idx_list:
            count_list[j]+=1
        idx_list.append(i)      
    return count_list

 

왜... 틀린거지?

 

# 네 번째 시도

def solution(prices):
    count_list = [0]*len(prices)
    idx_list = []
    flag = prices[0]
    idx_list.append(0)
    for i in range(1,len(prices)):
        flag = prices[i]
        for k in range(len(idx_list)-1,-1,-1):
            if flag < prices[idx_list[k]]:
                count_list[idx_list[k]]+=1
                del idx_list[k]
                
        for j in idx_list:
            count_list[j]+=1
        idx_list.append(i)
    return count_list
아무래도 list remove 하는 부분에서 같은 요소이면 다른 인덱스가 삭제될 수도 있어서 이런 경우가 생긴 것 같아 del로 바꾸었다. 또한, del을 사용할때 인덱스가 달라질까봐 거꾸로 for문을 돌았다.
  •  
저작자표시 비영리 변경금지

'✨ 공부 기록 > 알고리즘' 카테고리의 다른 글

[프로그래머스 lv 2] 구명보트 (탐욕법(Greedy))  (0) 2025.03.03
[프로그래머스 lv 1] 체육복 (탐욕법(Greedy))  (0) 2025.03.02
[프로그래머스 lv 2] 프로세스 (스택/큐)  (0) 2025.02.28
[프로그래머스 lv 2] 올바른 괄호 (스택/큐)  (0) 2025.02.28
[프로그래머스 lv 2] 기능개발 (스택/큐)  (0) 2025.02.28
'✨ 공부 기록/알고리즘' 카테고리의 다른 글
  • [프로그래머스 lv 2] 구명보트 (탐욕법(Greedy))
  • [프로그래머스 lv 1] 체육복 (탐욕법(Greedy))
  • [프로그래머스 lv 2] 프로세스 (스택/큐)
  • [프로그래머스 lv 2] 올바른 괄호 (스택/큐)
LaonMoon
LaonMoon
  • LaonMoon
    스토리생성연구블로그
    LaonMoon
  • 전체
    오늘
    어제
  • 공지사항

    • About me👋
    • 분류 전체보기
      • ✨ Story Generation
        • 논문 리뷰
        • 연구 관련 생각
      • ✨ 자연어 처리
        • (짧은) 논문 리뷰
        • HuggingFace
        • Transformer 구현
      • ✨ 공부 기록
        • 알고리즘
        • 딥러닝
        • 웹 개발
        • Flutter
        • Flask
        • Android
        • NLP
        • Docker&k8s
        • Database
        • [24-1] 데이터 분석
        • [24-1] RL
      • ✨ 포트폴리오
        • 2020
        • 2021
        • 2022
        • 2023
        • 2024
      • 프로그래밍
        • 오류(Error)정리
        • 시행착오
        • 리눅스 명령어
        • 공부내용 정리
      • AI Playground
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LaonMoon
[프로그래머스 lv 2] 주식가격 (스택/큐)
상단으로

티스토리툴바