Search

주식가격

대분류
기타
소분류
코딩테스트
유형
난이도
Level 2
문제 주소
https://school.programmers.co.kr/learn/courses/30/parts/12081
테스트사이트
프로그래머스
최종 편집 일시
2024/10/29 07:41
생성 일시
2023/11/24 15:40
12 more properties

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices
return
[1, 2, 3, 2, 3]
[4, 3, 1, 1, 0]

입출력 예 설명

1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

문제 풀이

문제 파악

해당 문제에서는 큐를 사용해서 해결해야 함
큐를 사용하는 이유는 주식 가격이 떨어지는 시점을 찾기 위함
주식 가격이 떨어지는 시점을 찾기 위해서는 가격이 떨어지는 시점 이후의 가격을 비교해야함
큐는 선입선출 구조이기 때문에 가격이 떨어지는 시점 이후의 가격을 비교하기에 적합

로직

prices = [1, 2, 3, 2, 3]를 받고
while문 로직 : prices가 빌 때까지 반복
prices를 deque 자료형으로 변환
for문 로직
prices의 첫번째 원소를 price에 저장
prices의 나머지 원소를 하나씩 꺼내서 q에 저장
price가 q보다 크면 반복문 종료
반복문이 종료되면 sec를 answer에 추가
answer를 반환

주요 사용 함수

deque() : 리스트보다 효율적인 자료구조 (데크)
양방향 자료구조 - 이중연결 리스트이다.
from collections import deque def solution(prices: list)-> list: queue = deque(prices) answer = [] while queue: price = queue.popleft() sec = 0 print("price : ", price) for q in queue: sec += 1 print("q : ", q) print("sec : ", sec) if price > q: break answer.append(sec) return answer
Python
복사
이상 답안
prices의 길이만큼 0으로 초기화된 리스트 생성
for문 로직 : prices의 길이만큼 반복
# i+1부터 prices의 길이만큼 반복
조건문
# prices[i]가 prices[j]보다 작거나 같으면
answer[i]에 1 추가
prices[i]가 prices[j]보다 크면
answer[i]에 1 추가
break
answer을 반환
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
Python
복사