본문 바로가기
Java/알고리즘

주식 가격

by 티코딩 2023. 11. 21.

문제를 처음 보고 설명이 이게 단가? 했다. 뭔소린가했더니 첫1초 가격 1일때, 나머지 네번중에 1보다 작은가격은 없으니 떨어지지 않은것이므로 4, 2초일때 가격 2도 마찬가지로 나머지 세번중에 작은가격이 없으니 3 이런식이다. 그래서 스택으로 풀려다 큐로도 풀수 있을거같아서 큐로 풀었다.

ㅇ 1트

public static int[] solution(int[] prices) {
        int[] answer = {prices.length};
        Queue<Integer> priceQueue = new LinkedList<>();

        for(int price : prices){
            priceQueue.add(price);
        }
        int num = 0;
        //peek == 맨앞에있는거 반환
        //poll == 맨앞에있는거 반환하고 삭제
        while(priceQueue.peek() != null){
            int value = priceQueue.poll();
            answer[num] = 0;

            for(int price : priceQueue){
                answer[num]++;
                if(value > price){
                    break;
                }
            }
            num++;
        }
        return answer;
    }

분명 내 머리속으로 해봐도 맞고, 노트에 풀어봤을때도 이게 맞는데 ArraysIndexOutOfBounds 예외가 나오길래 뭐가 잘못된거지 한참을 보다가

answer의 길이를 초기화해야하는데, answer에다가 값을 넣어버린것이다...

진짜 너무 허무했다.

ㅇ 2트

public static int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Queue<Integer> priceQueue = new LinkedList<>();

        for(int price : prices){
            priceQueue.add(price);
        }
        int num = 0;
        //peek == 맨앞에있는거 반환
        //poll == 맨앞에있는거 반환하고 삭제
        while(priceQueue.peek() != null){
            int value = priceQueue.poll();
            answer[num] = 0;

            for(int price : priceQueue){
                answer[num]++;
                if(value > price){
                    break;
                }
            }
            num++;
        }
        return answer;
    }

이렇게 하니깐 잘 됐다ㅋㅋㅋㅋ

진짜...오래간만에 풀었더니 배열 길이 초기화도 까먹은건가? 반성하자...

 

'Java > 알고리즘' 카테고리의 다른 글

정수 내림차순으로 배치하기  (1) 2024.01.04
뒤에 있는 큰 수 찾기  (0) 2023.11.22
주차 요금 계산  (0) 2023.11.08
더맵게(Priority Queue, Min Heap)  (0) 2023.11.02
모음사전  (0) 2023.11.01