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

이찬혁·2024년 4월 30일

알고리즘

목록 보기
52/72

프로그래머스 Lv2 - 주식가격 문제

프로그래머스 알고리즘 고득점 Kit 카테고리의 스택/큐 문제 중 레벨 2 주식가격 문제를 풀이했다.

분류는 스택/큐로 되어있으나 리스트를 활용하여 문제 풀이를 했다. 스택 또는 큐를 사용하면 효율성 면에서는 더 좋았을 것 같으나 이번 문제의 경우 리스트를 활용한 풀이도 무리없이 효율성 테스트를 통과하였다.

문제 설명이 뭔가 이상하게 써져 있어서 이해하는데에 시간을 소요한 것 빼고, 문제 풀이는 5분쯤 걸려서 한 것 같다.

+ 다른 사람의 풀이를 보니 다른 사람들도 문제 설명을 이상하게 적어 놓아서 이해하기 힘들었다더라..~

StockPrice.java

package com.example.Programmers.Lv2;

import java.util.ArrayList;
import java.util.List;

/**
 * 프로그래머스 Lv2 - 주식가격 문제
 * 분류: 스택/큐
 */
public class StockPrice {
    public int[] solution(int[] prices) {
        List<Integer> answer = new ArrayList<>();
        // 이중 for문을 통해 비교할 대상 요소(prevPrice)와 나머지 요소들을 비교하여 가격이 떨어지지 않은 기간(초)를 구한다.
        for (int i = 0; i < prices.length - 1; i++) {
            int prevPrice = prices[i];
            int maintainSec = 0;
            for (int j = i + 1; j < prices.length; j++) {
                maintainSec++;
                // 가격이 떨어졌을 경우 현재 대상과 비교 중지
                if (prevPrice > prices[j]) {
                    break;
                }
            }
            // 가격이 떨어지지 않은 기간(초)를 정답 리스트에 추가
            answer.add(maintainSec);
        }
        // 마지막의 경우 항상 0초간 가격이 떨어지지 않으므로 0을 추가
        answer.add(0);
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

StockPriceTest.java

package com.example.Programmers.Lv2;

import java.util.ArrayList;
import java.util.List;

/**
 * 프로그래머스 Lv2 - 주식가격 문제
 * 분류: 스택/큐
 */
public class StockPrice {
    public int[] solution(int[] prices) {
        List<Integer> answer = new ArrayList<>();
        // 이중 for문을 통해 비교할 대상 요소(prevPrice)와 나머지 요소들을 비교하여 가격이 떨어지지 않은 기간(초)를 구한다.
        for (int i = 0; i < prices.length - 1; i++) {
            int prevPrice = prices[i];
            int maintainSec = 0;
            for (int j = i + 1; j < prices.length; j++) {
                maintainSec++;
                // 가격이 떨어졌을 경우 현재 대상과 비교 중지
                if (prevPrice > prices[j]) {
                    break;
                }
            }
            // 가격이 떨어지지 않은 기간(초)를 정답 리스트에 추가
            answer.add(maintainSec);
        }
        // 마지막의 경우 항상 0초간 가격이 떨어지지 않으므로 0을 추가
        answer.add(0);
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}
profile
나의 개발로그

0개의 댓글