다희의 코딩 성장일기
[프로그래머스] level2. 주식가격 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level2. 주식가격 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42584
# 접근 방법 및 풀이
- 문제를 한번만에 이해를 못해서 바로 풀진 못했지만, 이해하면 쉬운 문제다.
- 스택, 큐 문제라 스택을 이용해서 풀었는데 다른사람 풀이보니까 ㅎ...그냥 이중 for문 돌렸더라. 약간 현타,,
- 사실 prices길이가 최대 10만이라 하나씩 다 비교해도 최대 100만 이하이기 때문에 쉽게 풀었을 것 같다.
- 먼저 문제는 설명이 헷갈리지만 조금만 생각해보면 쉽게 이해할 수 있다.
- 문제 예시처럼 prices[ ] 가 다음과 같을 때, 가격이 떨어지지 않은 기간을 구하면 된다.
-
0 1 2 3 4 1 2 3 2 3 - prices[0] = 1\ 가격이 1\보다 작은 값은 없으므로 끝까지 가격이 떨어지지 않는다.
- 마찬가지로 prices[1] = 2\ 도 가격이 2\보다 작은 값은 없으므로 끝까지 가격이 떨어지지 않는다.
- 반면에 prices[2] = 3\은 prices[3] = 2\ 차례일 때, prices[3]이 더 작은 값이므로 가격이 떨어진다. 1초를 유지하고 가격이 떨어지므로 1초간 유지한다고 본다.
- 스택을 이용해 prices[ ] 배열을 차례대로 탐색하면서, 스택이 비어있다면 push해준다. push할 때는 index값을 넣어준다.
- 그리고 스택이 비어있지 않다면, 스택의 꼭대기 값과 현재 prices[i]번째 값 크기를 비교해, prices[i]값이 꼭대기값과 같거나 크다면 push, prices[i]값이 더 작다면 꼭대기 값을 pop하고 answer을 채워준다. 그리고 pricese[i] 값도 스택에 push한다.
- 이렇게 prices[ ]을 다 탐색 후에 스택에 값이 있을 경우, 스택이 빌 때 까지 pop해서 answer값을 채워주면 된다.
- 자세한건 코드참조
# 주의할 점
- 스택에 값이 남아있을 경우 처리
JAVA 코드
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < prices.length; i++) {
while (!stack.isEmpty()) {
if (prices[stack.peek()] > prices[i]) {
Integer idx = stack.pop();
answer[idx] = i - idx;
continue;
}
break;
}
stack.add(i);
}
while (!stack.isEmpty()) {
Integer idx = stack.pop();
answer[idx] = prices.length - 1 - idx;
}
return answer;
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level2. 예상 대진표 (자바 JAVA) (0) | 2021.09.02 |
---|---|
[프로그래머스] level2. 더 맵게 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 쿼드압축 후 개수 세기 (자바 JAVA) (0) | 2021.09.01 |
[프로그래머스] level2. 위클리 챌린지 5주차 (자바 JAVA) (0) | 2021.08.31 |
[프로그래머스] level2. 순위 검색 (자바 JAVA) (0) | 2021.08.30 |
Comments