https://programmers.co.kr/learn/courses/30/lessons/42584
Stack(자료구조)
Priority Queue와 반대로 Last In First Out(LIFO) 나중에 들어간 데이터가 먼저 나오는 형식
import java.util.Stack;
Stack<Integer> stack = new Stack<>();
<속성>
stack.push(value) : value값을 추가
stack.pop() : 가장 위쪽 값을 제거
stack.clear() : stack전체 값 제거(초기화)
stack.peek() : 가장 상단의 값 출력
stack.size() : stack 크기 출력
stack.empty() : stack이 비어있는지 확인, 비어있다면 True
stack.contain(1) : stack에 1 있는지 확인, 있다면 True
문제
문제를 이해하지 못해서 다른 블로그 풀이글보고 이해.....
첫번째 숫자가 1일때 뒤에 오는 숫자는 2,3,2,3이므로 모두 1보다 크다
두번째 숫자가 2일때 뒤에 오는 숫자는 3,2,3이므로 크거나 같다
세번째 숫자는 3일때 뒤에 오는 숫자가 2이므로 작기때문에 가격이 떨어지고 다음으로 오는 수가 3이므로 가격이
떨어지지않는다
> 가격이 떨어지지 않는 횟수를 count해서 return해줘야 한다.
* Stack사용 안한 코드
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
int i, j;
for(i = 0; i < prices.length; i++){
for(j = i + 1; j < prices.length; j++){
// count해주는 역할
answer[i] += 1;
// i일떄 가격이 j일때의 가격보다 크면 break걸어주어 i를 다음 수로 넘긴다.
if(prices[i] > prices[j]){
break;
}
}
}
return answer;
}
}
* Stack 사용한 코드(프로그래머스 사이트 출제 의도)
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> stack = new Stack<>();
int i, j;
for (i = 0; i < prices.length - 1; i++) {
for (j = i + 1; j < prices.length; j++) {
if (prices[i] > prices[j]){
break; // prices[i]가 prices[j]보다 크면 break
}
}
if (j == prices.length){
j--;
}
stack.push(j - i);
}
answer[stack.size()] = 0;
for(i = stack.size() - 1; i >= 0; i--){
answer[i] = stack.pop();
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[Java] 프로그래머스 : 큰 수 만들기(StringBuilder 사용) (0) | 2022.06.21 |
---|---|
[Java] 프로그래머스 : 체육복(Greedy Algorithm) (0) | 2022.06.21 |
[Java] 프로그래머스 : 타겟 넘버(DFS 사용) (0) | 2022.06.20 |
[Java] 프로그래머스 : 수박수박수박수박수박수?(while 사용) (0) | 2022.06.20 |
[Java] 프로그래머스: 2016(switch사용) (0) | 2022.06.17 |
댓글