프로그래밍 공부
작성일
2024. 2. 15. 12:23
작성자
WDmil
728x90

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 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이 된적이 없음으로, 1은 모든 배열의 사이즈값에 자기자신을 뺸 값을 가진다.

 

두번째는 2인데, 자기자신 이후부터 자기자신 밑으로 떨어진적 이 없으니, 모든값을 계산해, 자기자신과 자신의 뒷값을 제외한 배열의 사이즈를 가진다.

 

세번째는 바로 다음값이 2로 떨어졌음으로, 3보다 더 낮은값이 2가 되었기 때문에, 1초간 유지되었다고 보아 1이 되는것이다.

 

네번째는 자기자신 이외에 이후 배열값이 한개 남았음으로, 비교연산이 한개라서 1이되고,

 

마지막은 이유불문 0이된다.

 

떨어지는 것의 정도를 각 값으로 연산하는것 이 아니라 각 값 위치당 연산으로 생각해야 한다.

아무리 읽어봐도 문제를 잘못출제 한것같음.


첫 번째 시도

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    answer.resize(prices.size());
    
    for(int i = 0; i < prices.size(); i++)
        for(int j = i+1; j < prices.size(); j++) {
            answer[i]++;
            if(prices[i] > prices[j]) break;
        }
    return answer;
}

성공

스텍 큐 문제가 아니라 그냥 이중for문으로 돌려서 배열항목을 검사하고, 값을 중첩시키면 된다.

 

스텍큐를 사용하지 않아도 무방함.

 

효율성 테스트를 성공하였음으로 이게 정답임!

728x90

'코딩테스트 문제 풀이 > 스텍&큐' 카테고리의 다른 글

[2018 KAKAO BLIND RECRUITMENT 3차] n진수 게임  (0) 2024.06.04
다리를 지나는 트럭  (0) 2024.02.14
프로세스  (0) 2024.02.08
올바른 괄호  (0) 2024.01.30
기능개발  (0) 2024.01.19