본문 바로가기
코딩일기/알고리즘

[프로그래머스 : 레벨2] 주식가격 (Java)

by 욱파이어니어 2021. 5. 27.
728x90
반응형

이번 문제는 솔직히 너무 쉬웠다. 굳이 Queue를 사용할 필요도 없었고 금방 끝냈던거같다.

근데 문제를 이해하는데 조금 걸렸다.

 

그럼 이제 문제를 한번 보자.

 

문제 설명

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

 

문제 풀이

해당 초 가격이 해당 초 이후 가격보다 떨어지는 시점까지 몇초걸리는지 return 하는것

(입출력 예 설명을 자세히 보면 될거같다)

 

나의 소스

 

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = {};
        
        // 답을 넣을 List
        List<Integer> answerList = new ArrayList<>();
        
        //초별로 가격 요소에 접근을 해야함
        for(int i = 0; i<prices.length;i++){
            int count = 0;
            for(int j = i;j<prices.length;j++){
                if(j == i){
                    continue;
                }else{
                    if(prices[i] <= prices[j]){
                        count++;
                    }else{
                        count++;
                        break;
                    }
                }
            }
            answerList.add(count);
        }
        
        answer = new int[answerList.size()];
        
        for(int i = 0;i < answerList.size();i++){
            answer[i] = answerList.get(i);
        }
        
        return answer;
    }
}

나는 바깥 for문으로는 각초의 가격에 접근을 하였다.

 

        for(int i = 0; i<prices.length;i++){

        }

그리고 그안에는 해당 초 이후의 가격에 접근하여서 비교하였다.

 

            int count = 0; //초를 세기 위해서
            for(int j = i;j<prices.length;j++){
                if(j == i){ //다음 index부터 확인하기 위해서
                    continue;
                }else{
                    if(prices[i] <= prices[j]){ //가격이 작거나 같으면 count++하고 다음걸로
                        count++;
                    }else{
                        count++; //가격이 떨어졌다면 count++하고 break해서 다음걸로 이동
                        break;
                    }
                }
            }
            answerList.add(count);

 

위 두작업들만 해주면 이문제는 끝이다.

 

느낀점

1. 이중 for문이라고 쫄지말고 일단 문제를 풀어봐라

2. Queue에서는 index로 값에 접근을 못한다. index를 사용하고 싶다면 List를 사용해라.

 

반응형