반응형
programmers.co.kr/learn/courses/30/lessons/42584
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
pricesreturn
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
입출력 예 설명
- 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
- 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
- 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
- 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
첫시도
- 문제를 잘못 이해ㅎ마
- 전체 중에 시작 가격보다 크거나 같은 기간의 총합을 구하는것이라 생각해서 break를 쓰지 않았음..
- \3 -> \2 이 될때 \2이 될때까지 1초가 걸리므로 1초 뒤에 가격이 떨어진것이라
- 결국, 1초 동안은 가격이 떨어지지 않은 것이다. (헷갈리는 포인트..)
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
for (int i = 0; i < prices.size(); i++)
{
int cnt = 0;
for (int j = i + 1; j < prices.size(); j++)
{
if (prices[i] <= prices[j])
{
cnt++;
}
}
answer.emplace_back(cnt);
}
return answer;
}
두번째 ( 통과 )
- 결국 마지막 값을 제외하곤 모든 값은 무조건 1초동안은 떨어지지 않게 되므로 cnt++을 먼저 하고
- 떨어지는 경우 break 한다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
for (int i = 0; i < prices.size(); i++)
{
int cnt = 0;
for (int j = i + 1; j < prices.size(); j++)
{
cnt++;
if (prices[i] > prices[j])
{
break;
}
}
answer.emplace_back(cnt);
}
return answer;
}
세번째
- stack 사용하는 방식은 다른 블로그 참고해봄
- 떨어진것들을 구하는 순서가 회문을 연상하게함..
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스 42586] 기능개발 / C++ (0) | 2021.05.02 |
---|---|
[프로그래머스 42583] 다리를 지나는 트럭 / C++ (0) | 2021.04.30 |
[프로그래머스 42579] 베스트앨범 / C++ (0) | 2021.04.29 |
[프로그래머스 42578] 위장 / C++ (0) | 2021.04.29 |
[프로그래머스 42577] 전화번호 목록 / C++ (0) | 2021.04.28 |