ABC464 A - Decisive Battle

決戦

考え方

入力は文字列が $1$ つなので、string 型の変数を $1$ つ用意し、cin で入力を受け取る。

文字列の中身を $1$ 文字ずつ見ていきたいので、forループを用意する。
問題の指示通り、文字列に含まれる EW の個数を比べればよい。

そのために、下準備として、まずカウンターを用意して、$0$ で初期化する。
そして、$1$ 文字ごとに、それが E なら $-1$、W なら $+1$ をしていく。
最終的にカウンターが正の数なら西軍の方が多く、負の数なら東軍の方が多い。

ということで、カウンターの値が $0$ より大きいなら "West"、そうでないなら "East" と答えればよい。
if分岐の中でcoutしてもいいし、出力用の変数を用意しておいてif分岐の外でcoutしてもいい。

入力例1での動作

入力を受け取る。

s: "EEWEW"

文字列の長さを取得する。

n: 5

答え用の変数 result"East" で初期化する。

result: "East"

counter を $0$ で初期化する。

counter: 0

$0$ 文字目をチェックする。
'E' なので counter を $1$ 減らす。

counter: -1

$1$ 文字目をチェックする。
'E' なので counter を $1$ 減らす。

counter: -2

$2$ 文字目をチェックする。
'W' なので counter を $1$ 増やす。

counter: -1

$3$ 文字目をチェックする。
'E' なので counter を $1$ 減らす。

counter: -2

$4$ 文字目をチェックする。
'W' なので counter を $1$ 増やす。

counter: -1

最終的に、counter は $0$ より大きくないので、result"East" のままでよい。

result: "East"

最後に、result を出力すればよい。

注意点

特になし。

別解

ループ内で「今何番目であるか」を使わないので、範囲for文を使ってもよい。

for (char c : s) {
  if (c == 'E') counter--;
  else counter++;
}

いちいち .at(i) を書く手間が省けるし、文字列の長さを自分で取得するのも不要になる。