알고리즘/프로그래머스

[Java, 자바] 프로그래머스 주식가격 문제

차나니 2024. 3. 18. 13:08

프로그래머스 

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

# 난이도 : LV2


문제내용


제한사항


입출력 예


풀이방법

이번 문제는 설명이 많이 이해하기 어려웠습니다....저 뿐만 아니라 많은 사람이 그렇게 느낀 것 같더라구요....

이해하기 쉽게 잘 정리해 놓으신 분의 내용을 참고하여 풀이하였습니다.

간단하게 요약하자면 각 초의 주가를 기준으로 해당 초부터 n초 사이에 가격이 떨어지지 않는 시간을 구하는 문제이더라구요 !

그래서 Queue를 활용하여 문제 풀이를 진행하였으며, target이라는 변수에 Q에 있는 주가를 poll한 뒤 Q에 남은 값을 활용하여 answer의 인덱스를 증가 시켜주었며, target가 Q의 주가보다 클 때, 즉 주가가 감소하였을 때 break를 실행하였습니다.

만약 [3, 2]이라는 주가 배열이 주어졌을 때 0번 인덱스 기준으로 3 -> 2 주가는 감소하였지만 1번 인덱스로 변경되기까지 1초간의 주가가 유지되었으므로 target과 Q의 값을 비교하기 전 answer의 값을 먼저 증가시켜주었습니다. 마지막 인덱스의 값은 더이상 비교할 값이 없기 때문에 while문 내부의 for문은 동작하지 않습니다 !


코드

import java.util.*;
class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Queue<Integer> Q = new LinkedList<>();
        for(int x : prices) Q.offer(x);
        int index = 0;
        while(!Q.isEmpty()){
            int target = Q.poll();
            for(int x : Q){
                answer[index]++;
                if(target > x) break;
            }
            index++;
        }
        return answer;
    }
}