Algorithm/Programmers

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

ikjo 2022. 3. 6. 05:53

문제 설명

 

 

 

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

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

programmers.co.kr

 

 

풀이 : Success

소스 코드

    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];

        int second, price, lastTime = prices.length - 1;

        for (int i = 0; i < lastTime; i++) {
            price = prices[i];
            second = 1;

            for (int j = i + 1; j < lastTime; j++) {
                if (price > prices[j]) { // 주식 가격이 떨어지면
                    break;
                }
                second++;
            }

            answer[i] = second;
        }

        answer[lastTime] = 0;

        return answer;
    }

 

풀이 회고

사실 해당 문제의 카테고리는 스택/큐 자료구조에 속했지만 막상 풀다보니 2중 for 반복문으로 풀 수 있었습니다. 처음에이 문제를 봤을 때 해당 문제에서 요구하는 것이 정확히 무엇인지 이해하기 어려웠습니다. 정확하게 이 문제에서 요구하는 것은 바로 "초 단위 시점별로 가격이 떨어지지 않은 기간을 저장하는 정수형 배열"입니다.

 

즉, 반환해야 할 answer 배열의 크기는 매개변수로 받은 prices의 크기와 동일해야 합니다. 이때 문제의 입출력 예시를 보면 마지막 초 단위 시점에서는 다음 가격이 없으므로 answer 배열의 마지막 인덱스 값은 어느 상황에서나 0임을 알 수 있습니다. 또한 마지막 초 단위 시점을 제외한 모든 시점에서는 적어도 1초간은 떨어지지 않는다고 볼 수 있습니다.

 

문제를 풀기 위한 접근 방법으로는 우선 1초 시점의 가격을 기준으로 잡고 이후에 가격들이 떨어지는지 체크한 후 떨어지지 않으면 지속시간인 second를 +1 시켜주었고 떨어진다면 second를 해당 초 단위 시점의 배열 인덱스 값에 할당해주었습니다. 앞서 언급했다시피 second는 최소 1이므로 1로 초기화시켜놓았습니다.

 

이후 2초 시점의 가격을 기준으로 잡고 앞선 처리 방식을 반복(마지막 인덱스 직전까지)해주도록 하면 문제에서 요구하는 "초 단위 시점별로 가격이 떨어지지 않은 기간을 저장하는 정수형 배열"을 구할 수 있습니다.

 

 

참고자료

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