https://programmers.co.kr/learn/courses/30/lessons/42584
코딩테스트 연습 - 주식가격
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00
programmers.co.kr
1차 시도
def solution(prices):
answer = [0 for i in range(0,len(prices))]
prices_r = prices[::-1]
for i in range(1,len(prices_r)):
#앞에 나보다 작으면 break
if prices_r[i-1] < prices_r[i]: answer[i] = 1
#앞에 나보다 크거나 같으면 answer[i]+=1
else:
for j in range(0,i):
if prices_r[i-1] >= prices_r[i]: answer[i] += 1
return answer[::-1]
2차 시도
def solution(prices):
answer = []
stack = []
for i in range(0, len(prices)):
for j in range(i+1, len(prices)):
if (prices[i] <= prices[j]):
stack.append(prices[j])
elif(prices[i] > prices[j]) : #다음가격이 떨어지면 뒤에꺼 상관없이 무조건 1
stack = [1]
break
#push끝
answer.append(len(stack))
stack = []
return answer
3차 시도
def solution(prices):
answer = []
for i in range(0, len(prices)-1):
stack = []
for j in range(i+1, len(prices)):
stack.append(prices[j])
if(prices[i] > prices[j]) : #다음가격이 떨어지면 뒤에꺼 상관없이 무조건 1
#stack = [1]
break
answer.append(len(stack))
answer.append(0) #마지막은 무조건 0
return answer
마지막에 애 먹은 부분이 break위에 주석처리한 부분이다.
다음 가격이 떨어졌을 때 stack을 [1]로 초기화하는 것이 아니라 break해서 바로 나오면 됐었다.
다음 가격이 떨어진다는 것이 바로 다음이 아니라 몇 개 유지/상승하다가 떨어지는 것도 있는데,
break 앞에서 stack = [1]로 초기화해버리면 몇 개 유지/상승 된 것도 다 날아가버린다.
(이해하고 보니 넘나 당연한 것... 예시 테스트케이스 통과한다고 너무 막 짰다.)
- 가격이 유지/상승만 하는거는 1 이상
- 가격이 나중에 하락하는 케이스는 전부 1
주어진 예시를 찬찬히보면 하락하는 케이스에 대한 테스트를 하기 힘들게 주어져있다.
(주어진 예시 테스트케이스가 너무 별로다)
다 사람들이 올린 질문을 보니 아래 테스트케이스를 추천해줬다.
prices = [ 1, 2, 3, 2, 3, 1 ]
return = [ 5, 4, 1, 2, 1, 0 ]
💡최종로직
1. prices 맨처음부터 뒤에서 하나 전까지 순회한다
1-1. 순회를 시작할 때 stack을 초기화한다
2. i 다음 값부터 prices 맨 뒤까지 순회한다
3. 다음 가격이 떨어지면 break한다
4. answer에 stack의 길이를 넣는다
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] Level2_타겟 넘버 (0) | 2021.08.05 |
---|---|
[프로그래머스] [Python] Level3_디스크 컨트롤러 (0) | 2021.08.05 |
[프로그래머스] [Python] Level3_여행경로 (0) | 2021.08.05 |
[프로그래머스] [Python] Level2_카펫 (0) | 2021.08.05 |
[프로그래머스] [Python] Level2_소수 찾기 (0) | 2021.08.05 |
댓글