[白俊/C+]10773号:0
7758 ワード
質問する
ロコド機長の
ヒョンミンがお金を管理するのを手伝う過程で、残念なことにいつも忙しくて、ヒョンはお金を誤って呼ぶ事故をよく犯します.
宰賢は間違った数字を叫ぶたびに0を叫んで、最近の
このようにすべての数字を書いた後の数字の和を知りたい.渽民を助けましょう!
質問の表示
入力
最初の行は整数Kを与える.(1 ≤ K ≤ 100,000)
その後、K行に整数を与えます.整数には0~1000000の値があり、整数が0の場合は最後に書き込まれた数値が消去され、そうでない場合は対応する数値が書き込まれます.
整数が0の場合に消去できることを保証します.
しゅつりょく
民が最終的に書いた数字とを出力します.最終的に得られた数の和は231−1以下の整数である.
例
ヒント
シミュレーション例2.
[1][1,3]
[1,3,5][1,3,5,4]
[1,3,5](0と呼ばれているので最近の数を除く)
[1,3](すでに0と呼ばれているので、次の最近の数を削除)
[1,3,7][1,3](0と呼ばれているので最近の数を除く)
[1](0が呼び出されたため、次の最近の数値を削除)
[1,6]
と七です.
アイデア
これは「最近書いた数をクリアする」という問題のため、後進先出(LIFO)構造スタックを使用します.
もし、渽民が数字を間違えて歌った場合、宰鉉が0を叫ぶと、popは最近、渽民に書いた数字を削除させ、渽民が数字を正しく歌えば、相応の値を押すことになる.
K入力が完了すると、スタック内の数字を新しい変数に1つずつ結合してポップアップします.
コード#コード#
#include <iostream>
#include <stack>
using namespace std;
int main() {
int K;
cin >> K;
int num;
stack<int> stk;
for(int i = 0; i < K; i++) {
cin >> num;
if (num == 0) {
stk.pop();
}
else {
stk.push(num);
}
}
int sum = 0;
for (int i = stk.size(); i > 0; i--) {
sum = sum + stk.top();
stk.pop();
}
cout << sum << endl;
return 0;
}
試行錯誤
// 왜 i<=stk.size()만큼 반복하는지 모르겠음
for (int i = 0; i < stk.size(); i++) {
sum = sum + stk.top();
stk.pop();
}
最初にfor文の条件を次のように設定します.i <= stk.size()
何度も繰り返す.この部分は理解できないので、while文を先に使います.// while문 사용
while (stk.empty() == 0) {
sum = sum + stk.top();
stk.pop();
}
この場合、コードは正常に動作します.これに基づいて、forクエリ条件をstk.size()から小さくする方法に変更します.コードが1行1行繰り返されるにつれて、最初の条件文が必要になることに気づきました.Reference
この問題について([白俊/C+]10773号:0), 我々は、より多くの情報をここで見つけました https://velog.io/@dkswlgus00/백준C-10773번-제로テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol