프로그래머스 주식가격
본문 바로가기
알고리즘 모음집/New 알고리즘

프로그래머스 주식가격

by KyeongMin 2020. 8. 12.
728x90
반응형

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

 

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

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

programmers.co.kr

 

#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 time = 0;
		for (int j = i+1; j < prices.size(); j++) {
			++time;// 증가
			if (prices[i] >prices[j])break;
		}
		answer.push_back(time);
	}
	return answer;
}

 

위에 소스는 문제를 읽고 그냥 직관적으로 짤 수 있는 소스이다. 하지만 효율성에서 만족하지 못한다. 일일이 다 검사를 진행하기 때문이다. 그래서 N의 값이 커지게되면 시간초과가 날 수 있지만 이번 예제에서 저렇게 풀이를 해도 시간초과는 나지 않는다 하지만 그래도 최적화가 항상 중요하다. 그래서 어떻게 할지 생각해보았다. 

#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
	vector<int> answer(prices.size());
	stack<int>s;
	for (int i = 0; i < prices.size(); i++) {
		while (!s.empty() && prices[s.top()] > prices[i]) {
			answer[s.top()] = i - s.top();
			s.pop();
		}
		s.push(i);//제일 위에꺼만 비교가능
	}

	while (!s.empty()) {
		answer[s.top()] = prices.size() - s.top() - 1;
		s.pop();
	}
	return answer;
}

 

두번째 소스를 보면 정말 효과적으로 시간이 개선이 된것을 볼 수 있다. stack의 특성을 이용했다. i는 일직선으로 쭉 돌게된다. push를 하면 stack의 특성상 가장 처음에 들어간것이 제일 위로 가게 된다. 탑을 쌓는것과 비슷한것이다. 

이런식으로 문제를 해결하면 좋을것 같다. 

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

15684 사다리 조작  (0) 2020.08.13
16235 나무 재테크  (0) 2020.08.12
프로그래머스 탑  (0) 2020.07.27
15686 치킨배달  (0) 2020.07.27
프로그래머스 다리를 지나는 트럭  (0) 2020.07.25

댓글