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

2022. 3. 21. 19:24·프로그래머스/Level 2

문제

 

 

풀이코드

public int[] solution(int[] prices) {           //주식가격
    int[] answer = new int[prices.length];
    int count = 0;                              //주식이 떨어지는 시간 count
    for(int i = 0; i< prices.length;i++){
        count = 0;
        for(int j = i+1; j< prices.length;j++){ 
            count++;
            if(prices[i]>prices[j]){            //만약 앞의 값이 더 크면 반복문 탈출
                break;
            }
        }
        answer[i] = count;
    }
    return answer;
}

원래 내가 문제를 보자마자 생각한 방법이 이중 반복문을 사용해서 각각 prices들의 크기를 비교해서 푸는 것 이었는데

솔직히, 생각해놓고 이게 시간 복잡도가 O(n*n)이라서 문제의 테스트 케이스에 prices배열의 길이가 많이 크면 실패하겠다...라고 생각하고 풀었는데? 다 통과되서 좀 당황하긴 했다.

근데 이 문제가 스택/큐영역에 있는 문제라서 스택이나 큐를 사용해서 풀고 싶었는데 내 머리로는 도저히 방법을 모르겠어서 다른 분의 풀이를 참고했다.

public int[] solution(int[] prices) {
    int[] ans = new int[prices.length];
    Stack<Integer> stack = new Stack();

    for (int i = 0; i < prices.length; i++) {
        while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
            ans[stack.peek()] = i - stack.peek();
            stack.pop(); // 답을 구했기 때문에 stack에서 제거한다
        }
        stack.push(i);
    }

    while (!stack.isEmpty()) { // 값을 구하지 못한 index == 끝까지 가격이 떨어지지 않은 주식
        ans[stack.peek()] = prices.length - stack.peek() - 1;
        stack.pop();
    }

    return ans;
}

 

 while (!stack.isEmpty() && prices[i] < prices[stack.peek()]){
 	ans[stack.peek()] = i - stack.peek();
        stack.pop(); // 답을 구했기 때문에 stack에서 제거한다
 }

이 조건은 stack이 비어있지 않거나 감소하는 값이 등장한다면 주식이 감소한 시점이므로 stack에서 해당 인덱스를 제거하고 i(현재 주식의 감소 시점) - stack.peek(주식이 처음 들어간 시점) 값을 ans[stack.peek]값에 넣어준다

 

 for (int i = 0; i < prices.length; i++) {
        //while 부분
        
        stack.push(i);
    }

0번부터 n-1까지 반복문을 돌며 

prices[stack.peek]과 비교하여 주식이 감소하지 않았다면(while의 조건에 만족이 안되면)

stack에 시간 index를 push한다

 

그리고 나머지 부분은 주석에 설명이 잘 달려있어서 따로 설명이 필요없을 것 같다.

 

참조블로그

https://girawhale.tistory.com/7

 

[프로그래머스] 주식가격(Stack) - JAVA

문제 링크 [프로그래머스] 주식가격 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 s

girawhale.tistory.com

 

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 타겟 넘버  (0) 2022.03.25
[프로그래머스][Level2][Java] 더 맵게  (0) 2022.03.23
[프로그래머스][Level2][Java] 프린터  (0) 2022.03.18
[프로그래머스][Level2][Java] 124 나라의 숫자  (0) 2022.03.12
[프로그래머스][Level2][Java] 다음 큰 숫자  (0) 2022.03.11
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 타겟 넘버
  • [프로그래머스][Level2][Java] 더 맵게
  • [프로그래머스][Level2][Java] 프린터
  • [프로그래머스][Level2][Java] 124 나라의 숫자
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 주식가격
    상단으로

    티스토리툴바