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 |
Tags
- 백준
- dockercompose
- CMD
- SpringBoot
- 프로그래머스
- to display the conditions report re-run your application with 'debug' enabled
- 이산수학
- 2108_통계학
- 날짜일수
- Error fetching remote repo 'origin'
- 설정
- Eclipse
- 자바
- 20055
- Error
- 이클립스
- 투에모스문자열
- jenkins
- docker
- 호석이두마리치킨
- 별자리 만들기
- 14466
- 알고리즘
- 소가길을건너간이유6
- 2167. 2차원 배열의 합
- Java
- documentationpluginsbootstrapper
- EC2
- 18222
- 21278
Archives
- Today
- Total
계단을 오르듯이
[JAVA] 프로그래머스 - 주식가격 본문
이 문제는 자료구조를 사용하지 않고 2중 for문을 사용해도 통과하는 문제이다.
시간복잡도 상 10,000 * 10,000 이라 빡빡하거나 안될 줄 알았는데 통과가 되는 것 같다.
스택의 자료구조를 사용하였다.
인덱스를 스택에 넣고, 해당 인덱스의 값이 스택의 top()보다 작으면 인덱스의 차로 계산을 하고, 현재 top의 계산이 끝나도 스택에 존재하는 모든 top과의 비교를 통해 주식의 하락세를 확인해야한다.
그리고 무조건 모든 인덱스는 스택에 한번씩은 들어가 다음 연산을 수행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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() && prices[stack.peek()] > prices[i]){
int idx = stack.pop();
answer[idx] = i - idx;
}
stack.push(i);
}
int last = stack.pop();
while(!stack.isEmpty()){
int next = stack.pop();
answer[next] = last - next;
}
return answer;
}
}
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 조이스틱 (0) | 2022.02.03 |
---|---|
[JAVA] 프로그래머스 - H-Index (0) | 2022.02.02 |
[JAVA] 프로그래머스 - 다리를 지나는 트럭 (0) | 2022.01.30 |
[JAVA] 프로그래머스 - 프린터 (0) | 2022.01.29 |
[JAVA] 프로그래머스_베스트 앨범 (0) | 2022.01.12 |