본문 바로가기

알고리즘/프로그래머스

[java 자바] 프로그래머스: 주식가격

반응형

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

 

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

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

programmers.co.kr

 

문제 설명

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

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices                                                                     return

[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

 

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
		for(int i=0; i<answer.length; i++) {
			answer[i] = 0;
		}
		
		for(int i=0; i<prices.length; i++) {
			for(int j=i+1; j<prices.length; j++) {
                answer[i] ++;
				if(prices[i]>prices[j]) break;
			}
		}
		
		return answer;
    }
}

 

이 문제는 스택/큐 카테고리에 있어서 스택/큐로 접근해 보려고 했는데 지문을 이해하는것부터 한참 걸렸다.

 

[1, 2, 3, 2, 3]

 

에서 3초 시점의 3원이 1초 뒤에 가격이 떨어지므로 1초간 가격이 유지됬다고 본다고 되어있는데

 

4초 시점의 2원도 1초간 가격이 떨어지지 않으므로 1초간 가격이 유지됬다고 나와있어서

 

이게 도대체 무슨 소린가 했는데 테스트 케이스가 조금 부실하지 않았나 싶다.

 

마지막 시점을 제외하고는 무조건 시작할때 1초씩을 기본으로 가지고 시작한다고 이해하면 쉬울 것 같다.

 

그래서 코드를 보면 일단 시간을 먼저 1초 더해준뒤 가격을 비교하여 가격이 떨어졌으면 반복문을 종료하도록 했다.

 

테스트 케이스가 좀 더 길게 주어져서 3초와 4초의 차이를 명확히 알 수 있게 해줬으면

 

이해가 좀 더 쉽지 않았을까 싶기도 하다.

반응형