250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)
    • AI Life (0)
      • 생각 넓히기 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • uArm
  • swift
  • 머신러닝
  • 브루트포스
  • 카카오
  • Python
  • 프로그래머스
  • 문제풀이
  • ios
  • 개발자
  • data
  • ADsP
  • 선형대수
  • BOJ
  • BFS
  • 알고리즘
  • JPA
  • DP
  • Front-end
  • JAVA8
  • 자바
  • 파이썬
  • 구현
  • java
  • certificate
  • 백준
  • 개발
  • SpringMVC
  • 코딩테스트
  • AI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

[PGM] 주식 가격 (Java)
CodingTest/Programmers

[PGM] 주식 가격 (Java)

2022. 3. 27. 21:58
728x90
728x90

문제링크

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

 

코딩테스트 연습 - 주식가격

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

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
 우선순위 큐

1. 문제 이해

초 단위로 기록되어있는 주식의 가격에 대한 정보가 들어있는 int형 배열이 input으로 들어올 때 그 가격이 떨어지지 않은 기간이 몇 초인지 return 하는 문제이다.

 

2. 접근방법

우선순위 큐를 활용하여 문제를 해결할 수 있다. 우선 순위 큐를 사용하면 Heap처럼 사용할 수 있다.

주식 가격과 그 주식이 입력된 초를 가지는 객체를 생성하여 문제를 해결해줄 수 있다.

Max Heap의 구조로 만들어주어 해당 Queue에서 값이 가장 큰 값들만 빼서 확인해주면 문제를 쉽게 해결할 수 있다.

구현코드

package pgm_42584;

import java.util.PriorityQueue;

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

        PriorityQueue<Price> maxHeap = new PriorityQueue<>();
        for(int i = 0; i< prices.length; i++){
            Price inputPrice = new Price(i, prices[i]);
            maxHeap.add(inputPrice);
            while (!maxHeap.isEmpty() && maxHeap.peek().value > inputPrice.value){
                Price removePrice = maxHeap.remove();
                answer[removePrice.idx] = inputPrice.idx - removePrice.idx;
            }
        }

        while (!maxHeap.isEmpty()){
            Price removePrice = maxHeap.remove();
            answer[removePrice.idx] = prices.length - removePrice.idx-1;
        }
        return answer;
    }

    public class Price implements Comparable<Price> {
        int idx;
        int value;

        public Price(int i, int p){
            idx = i;
            value = p;
        }

        @Override
        public int compareTo(Price o) {
            return o.value == this.value ? 0 : o.value > this.value ? 1 : -1;
        }
    }
}
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)

 

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

'CodingTest > Programmers' 카테고리의 다른 글

[PGM] 점프와 순간이동  (0) 2022.08.03
[PGM] 구명보트 (java)  (0) 2022.03.29
[PGM_12981] 영어 끝말잇기 (Java)  (0) 2022.03.17
[PGM_77885] 2개 이하로 다른 비트 (Java)  (0) 2022.03.16
[PGM_42883] 큰 수 만들기 (Java)  (0) 2022.03.14
    'CodingTest/Programmers' 카테고리의 다른 글
    • [PGM] 점프와 순간이동
    • [PGM] 구명보트 (java)
    • [PGM_12981] 영어 끝말잇기 (Java)
    • [PGM_77885] 2개 이하로 다른 비트 (Java)
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바