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

조예빈·2024년 7월 9일
0

Coding Test

목록 보기
43/146
post-custom-banner

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

이 문제는 stack을 활용하지 않고도 풀 수 있고, 활용하고도 풀 수 있다.

아래는 각각을 활용한 풀이이다.

스택 활용 X

스택을 활용하지 않는 경우에는 이중 for문을 사용해 현재값과 현재값 이후의 값들을 비교한다. 현재값보다 이후 값이 더 작으면 break를 걸어 다음 값으로 넘어가도록 했다. 그리고 각각의 cnt값을 배열에 저장한 후 마지막이 이 값을 return 해 주었다.

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int length = prices.length;
        int[] answer = new int[length];
        
        for(int i=0; i<length-1; i++){
            int current = prices[i]; //현재 값
            int cnt = 0;
            for(int j=i+1; j<length; j++){ //현재값 이후의 값들만 저장
                cnt++;
                if(current > prices[j]){ //현재 값이 이후 값보다 더 크면
                    break;
                }
            }
            answer[i] = cnt;
        }
        return answer;
    }
}

스택 활용 O

일단 우선 stack에 넣어 주어야 한다.

초반에는 else문을 사용해서 조건에 일치하는 경우에만 1초가 증가되도록 하였다. 하지만, 문제에는 다음과 같은 조건이 있다.

즉, 계속 증가하는 경우에는 '증가한 초'만 세어주면 되지만, 증가하지 않은 경우에는 1초를 넣어주어야 하기 때문에 스택에 먼저 넣고 조건에 맞지 않으면 break를 걸어 주면 된다.

import java.util.*;
class Solution {
    public int[] solution(int[] prices) {
        int length = prices.length;
        int[] answer = new int[length];

        for(int i=0; i<length; i++){
            int now = prices[i]; // 비교 대상 값
            Stack<Integer> stack = new Stack<>();
            for(int j=i+1; j<length; j++){ // 현재 값 이후의 값들 비교
                stack.push(prices[j]); //일단 스택에 넣음
                if(now > prices[j]){ // 현재 가격이 이후 가격보다 크면 멈춤
                    break;
                }
            }
            answer[i] = stack.size();
        }
        return answer;
    }
}
import java.util.*;
class Solution {
    public int[] solution(int[] prices) {
        int length = prices.length;
        int[] answer = new int[length];

        for(int i=0; i<length; i++){
            int cnt = 0;
            int now = prices[i]; // 비교 대상 값
            Stack<Integer> stack = new Stack<>();
            for(int j=i+1; j<length; j++){ // 현재 값 이후의 값들 비교
                stack.push(prices[j]);
                if(now > prices[j]){
                    break;
                }
            }
            cnt = stack.size();
            answer[i] = cnt;
        }
        return answer;
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러
post-custom-banner

0개의 댓글