본문 바로가기
알고리즘 문제/프로그래머스

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

by 에르주 2020. 9. 4.
반응형

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

 

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

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

programmers.co.kr

문제 설명

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

제한사항

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

입출력 예

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

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.

 

풀이

프로그래머스에서는 이 문제를 stack과 queue 활용으로 되어 있는데 단순히 for문 2개를 이용하여 값을 탐색하는 형태의 알고리즘을 구현하였다.

 

입출력 예처럼

처음 prices 값이 1일 때, prices 2, 3, 2, 3을 비교하면서 1보다 작지 않다면 끝의 Index와 시작하는 처음 Index값을 빼준 값을 새로운 vetor<int> vc 변수에 push_back을 하였다.

 

또 2번째 index와 같이 바로 3번째 Index의 값이 감소하였다면 주식이 떨어지지 않은 적이 없으므로 바로 Index의 차이를 빼고 break를 하도록 하였다,

 

추가적으로 Index가 가장 마지막 일 경우에는 한번도 떨어지지 않기 때문에 vc에 0을 push_back 하였다.

 

끝.

 

#include <string>
#include <vector>
#include<iostream>

using namespace std;

vector<int> solution(vector<int> prices) {
    
    int answerArray[100000];
     vector<int> answer;
    for(int i=0; i < prices.size()-1; i++) { 
        for(int j = i+1; j<prices.size();j++){
            if(prices[i] > prices[j]) {
                //cout<< i<<" , "<<j<<endl;
                answerArray[i] = j-i;
                break;
            }
            
            if( j == prices.size()-1){
                answerArray[i] = j-i;
                break;
            }
            
        }
        
       
        
    }
    
    for(int k=0; k<prices.size();k++){
        
        answer.push_back(answerArray[k]);
    }
   
    return answer;
}
반응형

댓글