본문 바로가기

Tech/[PS] Reviews

[프로그래머스-코딩테스트 연습] 주식가격

Hi, There!
안녕하세요, 바오밥입니다.


목차

  • 문제
  • 풀이

 


문제

문제 내용

https://school.programmers.co.kr/learn/courses/30/lessons/42584?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

풀이

나의 풀이

- 다른 사람의 풀이를 참고하여 풀이했다.

- for문의 i=(prices.length-que.size())를 도출한 점이 인상 깊었다. 앞으로 반복문의 시작점도 문제 풀이의 중요한 키가 될 수 있다는 것을 기억해야겠다.

- 주식 가격을 큐에 전부 넣은 뒤 큐를 순회한다.

- 큐에 맨 앞에 있는 날짜를 cur 변수로 담은 뒤 주식 가격 배열과 비교 순회한다.

- 비교 순회 시 고려해야 될 경우의 수는 두 가지이다.

1) cur 보다 익일 주식 가격이 더 높은 경우

2) cur 보다 익일 주식 가격이 더 낮거나 같은 경우

- answer 배열을 만들어 각 날짜에 대한 누적 값을 저장하는 곳으로 사용한다.

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        Queue<Integer> que = new LinkedList<>();
        int[] answer = new int[prices.length];
        int idx = 0;
        
        for(int i : prices) que.offer(i);
        
        while(!que.isEmpty()) {
            int cur = que.poll();
            for(int i=(prices.length-que.size()); i<prices.length; i++) {
                if(cur <= prices[i]) {
                    answer[idx]++;
                } else {
                    answer[idx]++;
                    break;
                }
            }
            idx++;
        }
        
        return answer;
    }
}