728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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초간 가격이 떨어지지 않았습니다.

[문제 풀이]

우선, 브루트포스로 푸는 방법밖에 생각이 안나서 이중 for문으로 풀었다.

첫 인덱스부터 뒤에 자기보다 작은게 있는지 체크하도록.. 약, N^2의 시간복잡도를 가질것 같다.

 

answer 벡터를 입력으로 들어오는 prices 벡터의 크기로 초기화해주었다.

벡터는 생성할때 기본으로 0으로 초기화 된다. (마지막 값을 신경써주지 않아도 된다. 마지막 값은 무조건 0)

 

for문을 돌면서 뒤에 값들이 자기보다 크거나 같다면 answer의 해당 인덱스의 값을 1씩 증가시켜주고,

그렇지 않다면 break를 걸어 다음 인덱스를 검사할수 있도록 코드를 작성했다.

 

파이팅 !

코드가 깨끗하고 명확하게 보일진 모르겠지만, 누군가에게 도움이 될 수도.. 있기에..

더보기
#include <string>
#include <vector>
#include <queue>
using namespace std;

vector<int> solution(vector<int> prices) {
    int priceSize = prices.size();
    vector<int> answer(priceSize);
    for(int i =0; i < priceSize-1; i++)
    {
        for(int j = i+1; j < priceSize; j++)
        {
            if(prices[i] <= prices[j]) answer[i]++;
            else
            {
                answer[i] += 1;
                break;
            }
        }
    }
    
    return answer;
}
복사했습니다!