문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.
※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.
👧 나의 풀이
def solution(prices) :
answer=[0]*len(prices)
for i, p in enumerate(prices) :
for idx in range(i+1, len(prices)) :
if p > prices[idx] : # 가격 떨어짐
answer[i]=idx-i
break
else : # 끝까지 가격이 안떨어짐
answer[i]=len(prices)-i-1
return answer
이중 for 문으로 구현해도 시간 초과 안되나 했는데 되네
끝까지 가격이 안떨어지면 break가 실행되지 않기 때문에 else문이 작동한다.
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
int cnt=0; // 가격이 내려가는 시간
int idx=0; // answer의 인덱스
Deque<Integer> que=new LinkedList();
for (int price : prices){
que.offerLast(price);
}
while (!que.isEmpty()){
int price=que.pollFirst();
cnt=0;
for(int p : que){
if (price > p){ // 가격 내려감
cnt++;
break;
}
cnt++; // 가격 안 내려감
}
answer[idx]=cnt;
idx++;
}
return answer;
}
}
Deque로 구현
파이썬으로 풀이한 다른 사람의 풀이를 java로 구현해봄
que에서 첫 번째 값을 빼서 price에 담는다. price의 값은 que의 원소들과 비교한다.
🤍 다른 사람 풀이
from collections import deque
def solution(prices) :
answer=[]
prices=deque(prices)
while prices :
c=prices.popleft()
count=0
for i in prices :
if c > i :
count+=1
break
count+=1
answer.append(count)
return answer
deque로 구현
가격이 안내려가면 count를 계속 올린다.
가격이 내려가면 count를 1 증가시킨 후 break한다.
문제 출처 👉 프로그래머스
반응형
'coding test' 카테고리의 다른 글
[Java] 2003. 수들의 합 2 (0) | 2021.07.05 |
---|---|
[Java] 베스트앨범 (0) | 2021.07.02 |
[Python, Java] 프린터 (0) | 2021.06.28 |
[파이썬] 8911. 거북이 (0) | 2021.06.21 |
[파이썬, Java] 3568. iSharp (0) | 2021.06.21 |