본문 바로가기
Programmers

[Java] 프로그래머스 : 주식가격(Stack 사용)

by 엘딘 2022. 6. 21.

https://programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

 

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;
    }
}

 

 

 

 

 

 

댓글