[プログラマー]株価(C++)
📌 リファレンス
引き渡しアルゴリズム研究に関わる問題は19週目からBellogに記録される(18週前に復習してアップロードする予定)🤗) 他の個人が回答した基準やプログラマの質問は、自分が意味があると思っている部分だけをフィルタリングしてBellogに記録します.Bellogにアップロードされていない他の質問やコードを知りたい場合は、次のGithubでさらに確認できます.👀 ご来店ありがとうございます🙏
💚 github | dianstar/Algorithm-BOJ
💚 github | dianestar/Algorithm-Programmers
株価|問題ショートカット
これはスタック/キュータイプに分類される問題です.
スタックを活用して解きほぐそうとしたが思い出せなかった
だから私はそのままの感じで、二重for文を書いて、それから回りました.
O(N^2)複雑度なので心配…幸い時間を超えなかった(?)
cf)本当に不思議で、二重for文のコードを書くのはスタックのコードを書くのと同じ効率です.
特に思いつかない方法がなければ、直感的に問題を解決するのも悪いことではありません!
今日の私の解答はあまりにも直観的で、何の説明もありません.
👇 スタックでロックを解除する方法を知りたいので、グーグル霊の後でコードを修正しました.
価格の並び値、つまり株の価格をスタックに入れてみました.
コアは、価格配列インデックス、すなわち株価の時点(秒単位)をスタックに配置することです.
👉 価格の面では.
i)価格が下がっていない場合は、ポイントをスタックに押してください.
ii)価格が下落した場合、現在の時点(i)-
答えベクトルの対応する時点インデックスに格納され、その時点がポップアップされます.
👉 prices配列は終了し、スタックが空でない場合、
これは、スタックに問題が発生するまで価格が下落しなかったことを意味します.
前の時点(prices.size(-1)からその時点(timestack.top())の値を減算します.
答えベクトルの対応する時点インデックスに格納され、ポップアップされます.
引き渡しアルゴリズム研究に関わる問題は19週目からBellogに記録される(18週前に復習してアップロードする予定)🤗) 他の個人が回答した基準やプログラマの質問は、自分が意味があると思っている部分だけをフィルタリングしてBellogに記録します.Bellogにアップロードされていない他の質問やコードを知りたい場合は、次のGithubでさらに確認できます.👀 ご来店ありがとうございます🙏
💚 github | dianstar/Algorithm-BOJ
💚 github | dianestar/Algorithm-Programmers
エンコードテスト高得点Kit>スタック/キュー
株価|問題ショートカット
回答(2022年1月20日WED)💻)
🤔 サダム+イタリア草のコア?!
これはスタック/キュータイプに分類される問題です.
スタックを活用して解きほぐそうとしたが思い出せなかった
だから私はそのままの感じで、二重for文を書いて、それから回りました.
O(N^2)複雑度なので心配…幸い時間を超えなかった(?)
cf)本当に不思議で、二重for文のコードを書くのはスタックのコードを書くのと同じ効率です.
特に思いつかない方法がなければ、直感的に問題を解決するのも悪いことではありません!
🔽 冗長for文コード効率テスト結果
🔽 スタックコード効率テスト結果
今日の私の解答はあまりにも直観的で、何の説明もありません.
👇 スタックでロックを解除する方法を知りたいので、グーグル霊の後でコードを修正しました.
Googleで入手したTip
価格の並び値、つまり株の価格をスタックに入れてみました.
コアは、価格配列インデックス、すなわち株価の時点(秒単位)をスタックに配置することです.
👉 価格の面では.
i)価格が下がっていない場合は、ポイントをスタックに押してください.
ii)価格が下落した場合、現在の時点(i)-
答えベクトルの対応する時点インデックスに格納され、その時点がポップアップされます.
👉 prices配列は終了し、スタックが空でない場合、
これは、スタックに問題が発生するまで価格が下落しなかったことを意味します.
前の時点(prices.size(-1)からその時点(timestack.top())の値を減算します.
答えベクトルの対応する時点インデックスに格納され、ポップアップされます.
🔽 冗長for文コード(C++)
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
int N = prices.size();
vector<int> answer(N, 0);
for (int i=0; i<N; i++) {
for (int j=i+1; j<N; j++) {
answer[i]++;
if (prices[i] > prices[j]) { break; }
}
}
return answer;
}
🔽 スタックのコードを使用(C++)
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
int N = prices.size();
vector<int> answer(N);
stack<int> timeStack;
for (int i=0; i<N; i++) {
while (!timeStack.empty() && prices[i] < prices[timeStack.top()]) { // 가격이 떨어진 경우
answer[timeStack.top()] = i-timeStack.top(); // 떨어지지 않은 기간 계산 (현재 시점 - 해당 시점)
timeStack.pop(); // 해당 시점 pop
}
timeStack.push(i); // 현재 시점 push
}
while(!timeStack.empty()) { // 끝까지 가격이 떨어지지 않은 나머지 경우들 처리
answer[timeStack.top()] = (N-1) - timeStack.top(); // 떨어지지 않은 기간 계산 (종료 시점 - 해당 시점)
timeStack.pop(); // 처리 완료된 해당 시점 pop
}
return answer;
}
Reference
この問題について([プログラマー]株価(C++)), 我々は、より多くの情報をここで見つけました https://velog.io/@dianestar/프로그래머스-주식가격テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol