문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 유지된 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
| prices | return |
|---|---|
| [498,501,470,489] | [2,1,1,0] |
입출력 예 설명
- 1초 시점의 ₩498은 2초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
- 2초 시점의 ₩501은 1초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
- 3초 시점의 ₩470은 최종 시점까지 총 1초간 가격이 떨어지지 않았습니다.
- 4초 시점의 ₩489은 최종 시점까지 총 0초간 가격이 떨어지지 않았습니다.
class Solution {
int[] answer;
public int[] solution(int[] prices) {
int size = prices.length;
answer = new int[size];
if(prices.length>=2&&prices.length<=100000){
for(int i=0; i<size;i++){
if(prices[i]<=10000&&prices[i]>=1){
int present = prices[i];
int cnt=0;
for(int j=i; j<size-1;j++){
if(present<=prices[j]){
cnt++;
}else{
break;
}
}
answer[i]=cnt;
}
}
}
return answer;
}
}
------------------------------------------------------
import java.util.Stack; class Solution { public int[] solution(int[] prices) { Stack<Integer> beginIdxs = new Stack<>(); int i=0; int[] terms = new int[prices.length]; beginIdxs.push(i); for (i=1; i<prices.length; i++) { while (!beginIdxs.empty() && prices[i] < prices[beginIdxs.peek()]) { int beginIdx = beginIdxs.pop(); terms[beginIdx] = i - beginIdx; } beginIdxs.push(i); } while (!beginIdxs.empty()) { int beginIdx = beginIdxs.pop(); terms[beginIdx] = i - beginIdx - 1; } return terms; } }
----------------------------------------------
class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; for(int i = 0; i < prices.length; i++){ int count = 1; for(int j = i+1; j < prices.length; j++){ answer[i] = count; count++; if(prices[i] > prices[j]) break; } } return answer; } }
출처: https://programmers.co.kr
'알고리즘' 카테고리의 다른 글
| (JAVA) K번째 수 (0) | 2018.10.23 |
|---|---|
| (JAVA) 다리를 지나는 트럭 (0) | 2018.10.23 |
| (JAVA) 완주하지 못한 선수 (0) | 2018.09.19 |
| (JAVA) 땅따먹기 (0) | 2018.09.17 |
| (JAVA) 나머지 한 점 (0) | 2018.09.15 |