728x90
반응형
[문제]
https://campus.programmers.co.kr/tryouts/139163/challenges
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
[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로 비교하고, push 혹은 pop해준다.
- 스택에는 인덱스를 삽입
- 결과로 리턴할 배열에는 조건에 맞는 값을 넣는다.
- 스택에 남은 값들 pop하며 결과 배열에 삽입
코드 구현
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] timer = new int[prices.length];
Deque<Integer> stack = new ArrayDeque<>();
for(int i=0;i<prices.length;i++){
while (!stack.isEmpty() && prices[stack.peek()]>prices[i]){
//뽑아내고 차례대로 비교하기. 체온 재려고 줄 서있는거랑 비슷.
//최초로 떨어지기 시작한 시점이 기준점이 되어 다 비교한다.
int value= stack.pop();
timer[value] = i- value;//기준점으로부터 얼마나 기다렸는지
}
stack.push(i);
}
//스택에 남아있으면 끝까지 가격이 떨어지지 않은 경우이다.
while (!stack.isEmpty()){
int value = stack.pop();
timer[value] = prices.length-value-1;
}
return timer;
}
}
배우게 된 점
-스택 순회를 할 때는 비었는지 여부 체크를 꼭 해주자.
-기준점을 두고 나머지 요소도 비교하기 = while
-스택에서 뽑는 기준, 스택에 남아있는 값의 의미 명확하게 알기
반응형
'alorithm > programmers' 카테고리의 다른 글
[JAVA/프로그래머스] 연속된 부분 수열의 합 (0) | 2024.07.12 |
---|---|
[JAVA/프로그래머스] 완주하지 못한 선수 (0) | 2024.07.12 |
[JAVA/프로그래머스] 두 큐 합 같게 만들기 (0) | 2024.07.11 |
20. Valid Parentheses / 유효한 괄호 (0) | 2024.07.11 |
[JAVA/프로그래머스] [1차] 캐시 (0) | 2024.07.11 |