Programmers [고득점 Kit - 스택/큐] Java 풀이 : 주식가격
주식가격
https://programmers.co.kr/learn/courses/30/lessons/42584
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.
구해야 하는 것은 가격이 떨어지지 않은 기간 (몇 초) 인지를 구하는 것이다.
입출력 예를 보면,
1초 시점에선 ₩1 (배열의 위치 = 0)은 끝까지(배열의 위치 = 4) 떨어지지 않았다. 4 - 0 = 4초
2초 시점에선 ₩2 (배열의 위치 = 1)은 끝까지 (배열의 위치 = 4) 떨어지지 않았다. 4 - 1 = 3초
3초 시점에선 ₩3 (배열의 위치 = 2)은 1초 뒤 (배열의 위치 = 3) 에 떨어진다. 3 - 2 = 1초
4초 시점에선 ₩4 (배열의 위치 = 3)은 끝까지 (배열의 위치 = 4) 떨어지지 않았다. 4 - 3 = 1초
5초 시점에선 ₩5 (배열의 위치 = 4)은 뒤에 값이 없으니 0초간 떨어지지 않는다. 4 - 4 = 0초
즉, 가격이 떨어지지 않은 기간(몇 초)은 값이 낮아지는 배열의 위치(없을 경우 배열의 길이) - 기준 배열의 위치이다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for(int i=0;i<prices.length-1;i++){
int index = prices.length - 1;
for(int j=i+1;j<prices.length;j++){
if(prices[i]>prices[j]){
index = j;
break;
}
}
answer[i] = index - i;
}
return answer;
}
}
int형 변수 index는 값이 낮아지는 배열의 위치(없을 경우 배열의 길이) 이다. 초기값은 배열의 길이(5) - 1 이다.
첫번째 for문은 기준점을 잡을 반복문이고, 두번째 for문은 값을 비교할 반복문이다.
가격이 낮아질 때 ( if(prices[i]>prices[j]) ) index에 값이 낮아지는 배열의 위치를 담는다.
그리고 이 조건을 만족하면 두번째 for문을 빠져나와,
answer배열에 값이 낮아지는 배열의 위치(없을 경우 배열의 길이) - 기준 배열의 위치 를 계산한 값을 담는다.
이 같은 방법을 반복하면 결과값이 나온다.
스택과 큐로 풀지 못하여 아쉬움이 남는다.
다음번엔 꼭 스택과 큐를 사용하여 풀어보겠다.
Github 주소
https://github.com/MIN-04/CodingTest/blob/master/Programmers/PracticeKit/Stack_Queue/No42584.java
MIN-04/CodingTest
코딩테스트 준비 / 문제 풀이. Contribute to MIN-04/CodingTest development by creating an account on GitHub.
github.com