본문 바로가기
알고리즘/코딩 - 프로그래머스

[Java][프로그래머스][Level 2] 주식가격

by 주남2 2019. 5. 7.
반응형

* Level 2부터는 코드가 굉장히 혼란스러워 질 수 있습니다. ㅠㅠㅠ

 

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.

생각

문제를 이해하는데만 생각보다 오랜 시간이 걸렸다. 일단 여러개의 주식이 아니라 하나의 주식임을 생각하자. 1초 때의 이 주식의 가격은 1원이었다. 이 1원은 5초가 될 때까지 가격이 떨어지지 않는다. 따라서 4초간 떨어지지 않은 것이다. 이런 식으로 생각하면 되는데 한 가지 특이한 점이 있다.

 

3초 때의 상황을 보자. 3초 시점의 가격은 3이고 4초에 2가 되서 가격이 떨어진다. 그래서 나는 0 이라고 생각했는데, 1초 뒤에 가격이 떨어진 것이니 1초간은 떨어지지 않은 것으로 본다고 한다. 따라서 3번 째의 return 값은 1이다. 이를 잘 생각해서 만약 바로 떨어졌더라도 1초간은 가격이 유지 된 것으로 보자.

 

그렇다면 코드는 어떻게 짜야할까? 스택을 이용하는 문제라고 했지만 나는 꿋꿋하게 for문을 썼다. 사실 스택을 써도 푸는 방법은 비슷할 것이다. 1초때의 가격과 2,3,4,5초의 가격과 비교하여 가격이 떨어지지 않으면 1초를 추가하고 다음으로 넘어가고 만약 중간에 가격이 떨어졌다면 1을 증가시키고 멈춘다. 후에는 2초와 3,4,5초 / 3초와 4,5초를 비교하여   return 배열에 값을 넣어주면 된다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        int count = 0;
        
        for(int i=0; i<prices.length-1; i++) {
            count = 0;
            for(int j=i+1; j<prices.length; j++) {
                if(prices[i]<=prices[j]) {
                    count++;
                } else {
                    count++;
                    break;
                }
            }
            answer[i] = count;
        }
        
        answer[prices.length-1= 0;
        
        
        return answer;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

레벨 2가 되면서 문제가 많이 어려워졌다. 학교 공부에 치이다 보니 레벨 2는 많이 풀지 못했다. 레벨 2를 푼 문제까지 올리고 백준으로 넘어갈 예정이다.

반응형