프로그래머스 42584 - 주식가격
생각과 접근
- 문제가 스택/큐 분야에 있어서 스택과 큐를 활용해서 문제를 풀어보려다 실패해서 그냥 맨 처음에 생각했던 이중 for문 방식으로 풀었습니다.
- i for문에서 0부터 price_size - 2만큼 돕니다. prices의 마지막 원소를 탐색하지 않는 이유는 맨 마지막 주식 가격은 가격이 떨어질 수 없고, 이에 따라 answer 값이 0으로 고정되기 때문에 나중에 0 하나만 push_back하기로 했습니다.
- j for문에서 i + 1부터 price_size - 1만큼 돕니다. prices[i]보다 prices[j]이 작다면, answer에 j - i를 push_back하고 j for문을 종료합니다. 만약 j for문을 break없이 끝냈다면, answer에 j - i - 1를 push_back합니다.
- 왜 j - i와 j - i - 1로 나눠서 구분을 하는가?
- answer는 주식가격이 떨어지지 않는 시간 을 기록합니다. 아래 입출력 예로 설명하겠습니다.
- 쉽게 말해서, 주식가격이 떨어지지 않는 시간을 세는 방식은 prices 배열의 ,수를 세는 것 입니다.
- prices[2]는 prices[3]에서 j for문이 멈추게 됩니다. ,가 하나 있고, j - 1의 값은 3 - 2 = 1로 동일합니다.
- prices[0]는 prices[4]와 비교를 끝내고 j = 5인채로 j for문이 끝나게 됩니다. ,는 4개 있고, j - i - 1의 값은 5 - 0 - 1로 동일합니다. - 1이 있는 이유는 j for문에서 빠져나올 때 j++되어 그것을 하나 빼주는 것입니다.
- answer는 주식가격이 떨어지지 않는 시간 을 기록합니다. 아래 입출력 예로 설명하겠습니다.
- 왜 j - i와 j - i - 1로 나눠서 구분을 하는가?
코드
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> prices) {
int i, j, price_size = prices.size();
vector<int> answer;
for(i = 0; i < price_size - 1; i++){
for(j = i + 1; j < price_size; j++){
if(prices[i] > prices[j]){
answer.push_back(j - i);
break;
}
}
if(answer.size() != i + 1){
answer.push_back(j - i - 1);
}
}
answer.push_back(0);
return answer;
}
채점 결과
'Coding Test > programmers' 카테고리의 다른 글
프로그래머스 42583 - 다리를 지나는 트럭 (c++) (0) | 2020.07.28 |
---|---|
프로그래머스 42586 - 기능개발 (c++) (0) | 2020.07.28 |
프로그래머스 42585 - 쇠막대기 (c++) (0) | 2020.07.27 |
프로그래머스 42588 - 탑 (c++) (0) | 2020.07.27 |
프로그래머스 42579 - 베스트앨범 (c++) (0) | 2020.07.27 |