- 내 방법 풀이
- 어제에 이어 공부한 스택/큐 문제를 풀었으나, 평이한 난이도의 문제였고 굳이 스택/큐를 쓰지 않아도 되는 문제였다.
- 특이하게 주식의 값을 가지고 그 값이 몇초동안 떨어지지 않았는지를 각 가격별로 구하여 리턴하는 문제였다.
- 해당 주식의 값을 설정한 뒤 그 뒤의 가격들과 비교하면서 시간을 상승시키다가 떨어지면 반복문을 종료하는 식으로 코드를 구성했다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for (int i = 0; i < prices.length; i++) {
int price = prices[i];
for (int j = i+1; j < prices.length; j++) {
answer[i]++;
if (price > prices[j]) {
break;
}
}
}
return answer;
}
}
- 다른 사람 방법 풀이
- 문제의 유형에 맞게 스택을 활용하셔서 푸셨다.
- 스택의 특징(FILO)을 활용하여, 스택에서 값을 하나 꺼내 뒤로 순회하면서 가격이 떨어질 때의 index값에서 초기 인덱스값을 뺀 값을 다시 스택에 넣는 방법으로 한 바퀴 순회한 뒤, 스택에 남은 값들을 다시 꺼내서 terms배열에 저장하는 방식으로 푸셨다.
- 코드를 한 번 읽어보며 이해하는 방법으로도 공부가 되는 것 같다.
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;
}
}