다희의 코딩 성장일기

[프로그래머스] level2. 주식가격 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level2. 주식가격 (자바 JAVA)

ilmiodiario 2021. 9. 2. 11:32

[ 문제 ]  [프로그래머스] level2. 주식가격 (자바 JAVA)

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42584

 

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

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

programmers.co.kr


# 접근 방법 및 풀이 

 

  • 문제를 한번만에 이해를 못해서 바로 풀진 못했지만, 이해하면 쉬운 문제다.
  • 스택, 큐 문제라 스택을 이용해서 풀었는데 다른사람 풀이보니까 ㅎ...그냥 이중 for문 돌렸더라. 약간 현타,, 
  • 사실 prices길이가 최대 10만이라 하나씩 다 비교해도 최대 100만 이하이기 때문에 쉽게 풀었을 것 같다.
  • 먼저 문제는 설명이 헷갈리지만 조금만 생각해보면 쉽게 이해할 수 있다.
  • 문제 예시처럼  prices[ ] 가 다음과 같을 때, 가격이 떨어지지 않은 기간을 구하면 된다. 
  • 0 1 2 3 4
    1 2 3 2 3
  • prices[0] = 1\ 가격이 1\보다 작은 값은 없으므로 끝까지 가격이 떨어지지 않는다. 
  • 마찬가지로 prices[1] = 2\ 도 가격이 2\보다 작은 값은 없으므로 끝까지 가격이 떨어지지 않는다.
  • 반면에 prices[2] = 3\prices[3] = 2\ 차례일 때, prices[3]이 더 작은 값이므로 가격이 떨어진다. 1초를 유지하고 가격이 떨어지므로 1초간 유지한다고 본다. 
  • 스택을 이용해 prices[ ] 배열을 차례대로 탐색하면서, 스택이 비어있다면 push해준다. push할 때는 index값을 넣어준다.
  • 그리고 스택이 비어있지 않다면, 스택의 꼭대기 값현재 prices[i]번째 값 크기를 비교해, prices[i]값이 꼭대기값과 같거나 크다면 push, prices[i]값이 더 작다면 꼭대기 값을 pop하고 answer을 채워준다. 그리고 pricese[i] 값도 스택에 push한다.
  • 이렇게 prices[ ]을 다 탐색 후에 스택에 값이 있을 경우, 스택이 빌 때 까지 pop해서 answer값을 채워주면 된다.
  • 자세한건 코드참조

# 주의할 점 

 

  • 스택에 값이 남아있을 경우 처리

 

JAVA 코드
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()) {
				if (prices[stack.peek()] > prices[i]) {
					Integer idx = stack.pop();
					answer[idx] = i - idx;
					continue;
				}
				break;
			}
			stack.add(i);
		}
		while (!stack.isEmpty()) {
			Integer idx = stack.pop();
			answer[idx] = prices.length - 1 - idx;
		}
		return answer;
    }
}

 

 

REVIEW

Comments