[스택/큐] 주식가격

2022. 11. 25. 20:22·알고리즘/프로그래머스

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

문제 풀이 1) Brute Force

1: 2, 3, 2, 3 => 끝까지 가격이 떨어지지 않음. => 총 4초동안 가격 하락 X

2: 3, 2, 3 => 끝까지 가격이 떨어지지 않음. => 총 3초동안 가격 하락 X

3: 2 => 1초 후 가격이 2로 떨어짐. => 총 1초동안 가격 하락 X

2: 3 => 끝까지 가격이 떨어지지 않음. => 총 1초동안 가격 하락 X

3 => 마지막 값이라 0초동안 가격 하락 X

 

이중 for문을 이용해 문제를 풀었습니다.

현재 값이 뒤 인덱스 번호에 있는 값보다 작거나 같을 때는 answer 배열의 해당 인덱스 값을 하나씩 올려주고,

뒤 인덱스 번호에 있는 값보다 커지면 break 구문이 실행되어 반복문을 벗어나 다음 값이 비교되도록 합니다.

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        for (int i = 0; i < prices.length; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                answer[i]++;
                if (prices[i] > prices[j]) break;
            }
        }
        return answer;
    }
}

 

이중 for 문으로 풀었으므로 최악의 경우 시간 복잡도는 O(n^2) 입니다.

주어진 prices 길이의 최대값이 100,000 이면, 즉 입력값 n이 100,000 이므로 최악의 경우 총 연산횟수는 100억입니다.

보통 n이 1억 정도면 1초의 시간이 걸린다고 합니다. 

이에 따라 최악의 경우 100초의 시간이 걸릴 수 있습니다.

문제 풀이 2) Stack

이 문제가 스택/큐로 분류되어 있어 스택을 이용해 문제를 풀고자 했지만 도저히 아이디어가 떠오르지 않아 프로그래머스 다른 사람의 풀이, 구글링을 참고하여 풀이를 찾아보고 코드를 이해하려 노력했습니다.

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int n = prices.length;
        int[] answer = new int[n];
        // 주식가격 변화가 없는 시간대 저장
        Stack<Integer> stack = new Stack<>();
        
        for (int i = 0; i < n; i++) {
            while (!stack.isEmpty() && prices[stack.peek()] > prices[i]) {
                int pop = stack.pop();
                answer[pop] = i - pop;
                
            }
            stack.push(i);
        }
        
        while (!stack.isEmpty()) { // stack에 저장된 index == 끝까지 가격이 떨어지지 않은 주식
          int pop = stack.pop();
          answer[pop] = n - pop - 1;
        }
        return answer;
    }
}

 출처

문제 소스 : https://school.programmers.co.kr/learn/courses/30/lessons/42584 

풀이2 참조 : https://girawhale.tistory.com/7

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

[스택/큐] 올바른 괄호  (0) 2022.11.23
[스택/큐] 같은 숫자는 싫어  (0) 2022.11.23
[프로그래머스 - SQL] 상품 별 오프라인 매출 구하기  (0) 2022.11.22
[JS] 프로그래머스 - 위장  (0) 2020.11.14
[JS] 프로그래머스 - 소수 찾기(레벨2)  (0) 2020.11.11
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [스택/큐] 올바른 괄호
  • [스택/큐] 같은 숫자는 싫어
  • [프로그래머스 - SQL] 상품 별 오프라인 매출 구하기
  • [JS] 프로그래머스 - 위장
rondeveloper
rondeveloper
  • rondeveloper
    Ron's learning record
    rondeveloper
  • 전체
    오늘
    어제
    • 분류 전체보기 (103) N
      • k8s (3) N
      • AWS (1)
      • 리눅스 (5)
      • Docker (8)
      • 라이브러리 & 프레임워크 (14)
        • React (2)
        • NestJS (8)
        • Spring (0)
        • Django (3)
        • FastAPI (1)
      • 웹 (2)
        • Nginx (1)
      • 프로그래밍 언어 (29)
        • HTML (0)
        • CSS (0)
        • JavaScript (21)
        • Python (3)
        • Node.js (0)
        • TypeScript (4)
        • Java (1)
      • Today I learned (9)
      • 알고리즘 (9)
        • 백준 (0)
        • 프로그래머스 (8)
        • 개념 (1)
      • 티끌모아 태산 (5)
        • 하루에 영단어 하나씩 (5)
        • 독서 (0)
      • 시행착오 (3)
      • 데이터베이스 (2)
        • MySQL (0)
      • 컴퓨터 과학 (8)
        • 네트워크 (2)
        • 운영체제 (0)
        • 데이터베이스 (2)
        • 자료구조 (4)
      • 포트폴리오 (4)
        • JJINCAFE IN SEOUL (4)
        • CODEUNICORN (0)
      • 회고 (0)
      • CICD (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    생활코딩
    코딩테스트
    mysql
    django
    Kubernetes
    도커
    nestjs
    네트워크
    리눅스
    조인
    FastAPI
    배열
    레벨2
    기초
    IP 주소
    Docker
    iterable
    컨테이너
    javascript
    모듈
    Til
    typeorm
    typescript
    스택
    반복문
    redis
    자바스크립트
    Kubectl
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
rondeveloper
[스택/큐] 주식가격
상단으로

티스토리툴바