반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 싸피
- 설명
- 165672
- PCCP
- SQL
- 정기 코딩 인증평가
- java
- 소프티어
- 해결
- 10기
- 59409
- 142085
- MySQL
- 티스토리챌린지
- 수료
- 프로그래머스
- 퍼즐 조각 채우기
- 14942
- 후기
- 핵심
- 59412
- 오블완
- softeer
- 12930
- 조건에 부합하는 중고거래 상태 구하기
- 132202
- 백준
- 146355
- 진료과별 총 예약 횟수 출력하기
- SSAFY
Archives
- Today
- Total
개발 쥬스
[프로그래머스/Java] 42584 주식 가격 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42584
문제를 이해하는데 시간이 오래 걸려 질문 게시판을 참고해서 이 문제를 이해했습니다. 문제 설명에서 애매한 부분이 있었는데 추가 설명을 하자면 특정 시간에서의 주식 가격이 자신의 가격보다 크거나 같은 시점을 유지하다 처음으로 내려가는 시점까지의 그 시간을 구하는 것이 이 문제의 핵심입니다. 다시 말해 주식 가격이 자기 자신보다 처음으로 내려 가는 시점 이후에는 주식 가격이 오르든 내리든 상관이 없습니다.
그리고 prices의 인덱스 하나를 순차적으로 돌 때마다 1초의 시간이 걸린다고 생각해야 합니다.
🔍 고찰 과정
스택 자료구조를 활용하여 시간 정보를 계산하였습니다. 계산하는 과정은 다음과 같습니다.
1️⃣ prices의 인덱스 정보를 담는 스택을 하나 만든다.
2️⃣ prices 배열을 for문을 활용하여 하나씩 살핀다.
3️⃣ prices의 인덱스를 스택에 쌓아가며 주가가 내려가는 시점이 오면 스택에 있는 인덱스를 꺼내어 시간을 계산해준다.
4️⃣ prices 배열을 전부 돌았는데도 스택에 인덱스 값이 남아 있다면 주가가 내려간 시점이 없다는 의미이므로 그에 맞는 시간 계산을 해준다.
✏️ 코드
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int pLen = prices.length;
int[] answer = new int[pLen];
Stack<Integer> stack = new Stack<>(); // prices의 인덱스를 담을 스택
for (int idx = 0; idx < pLen; ++idx) {
while (!stack.isEmpty() && prices[stack.peek()] > prices[idx]) {
int sIdx = stack.pop();
answer[sIdx] = idx - sIdx; // 시간 계산해주기
}
stack.push(idx);
}
while (!stack.isEmpty()) { // 나머지 시간 계산해주기
int idx = stack.pop();
answer[idx] = pLen - 1 - idx;
}
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[백준/Java] 1167 트리의 지름 (0) | 2024.08.16 |
---|---|
[백준/Java] 1068 트리 (0) | 2024.08.16 |
[프로그래머스/Java] 42583 다리를 지나는 트럭 (0) | 2024.08.13 |
[백준/Java] 20166 문자열 지옥에 빠진 호석 (0) | 2024.08.12 |
[백준/Java] 3649 로봇 프로젝트 (0) | 2024.08.11 |