けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 052 B - Increment Decrement (7Q, 灰色, 200 点)

文字列の動きをシミュレーションしながら最大値も更新していく!

問題概要

整数  x を持っていて、最初は 0 である。

長さ  N の文字列  S に従って、これを使って [tex] N] 回の操作を行った。 i 回目の操作では、文字  S_{i} が 'I' ならば  x を 1 増やし、'D' ならば  x を 1 減らす。

操作の過程における、 x のとる値の最大値を求めよ。

解法

 x の変化をシミュレーションするのは for 文を用いて容易に書ける。

その過程での  x の最大値を表す変数を別途用意して、その値を逐次更新していけばよい。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    string S;
    cin >> N >> S;
    
    int x = 0, res = 0;
    for (auto c : S) {
        if (c == 'I') ++x;
        else --x;
        
        res = max(res, x);
    }
    cout << res << endl;
}