알고리즘/프로그래머스
[프로그래머스] 주식가격_JAVA
jimkwon
2022. 2. 11. 14:50
반응형
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42584
더보기
입출력 예
prices return[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
현재 prices[i]와 비교하는 prices[j]의 간극을 재어 return하면 된다.
단 바로 다음 주식에서 가격이 떨어지더라도 위의 예처럼 1초간은 가격이 떨어지지 않았으니 해당 부분만 유의하여 풀이하면 된다.
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> stack = new Stack<>();
int i, j;
for (i = 0; i < prices.length - 1; i++) {
for (j = i + 1; j < prices.length; j++) {
if (prices[i] > prices[j])
break;
}
if (j == prices.length)
j--;
stack.push(j - i);
}
answer[stack.size()] = 0;
for(i = stack.size() - 1; i >= 0; i--)
answer[i] = stack.pop();
return answer;
}
}
사실 나는 고득점kit에서 풀이하기 때문에 해당 문제가 스택/큐를 사용하는 자료구조 풀이라는걸 알고 있었다.
이 문제를 풀며 굳이 스택이 필요할까..? 라는 생각이 들어 스택 없이도 문제를 풀이해보았다.
class Solution {
public int[] solution(int[] prices) {
int len = prices.length;
int[] answer = new int[len];
int i, j;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
answer[i]++;
if (prices[i] > prices[j])
break;
}
}
return answer;
}
}
어이없게 짧은 코드..
가끔은 너무 자료구조에 얽메이지 않는것이 좋다는 교훈을 얻고간다..^_ㅜ...