ABC464 A - Decisive Battle

決戦

考え方

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

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

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

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

入力例1での動作

入力を受け取る。

s: "EEWEW"

E ならカウンターを $1$ 減らし、W なら $1$ 増やす。
カウンターを $0$ から始めると、次のように変化する。

読んだ文字 カウンター
E $-1$
E $-2$
W $-1$
E $-2$
W $-1$

最後のカウンターは $-1$ で $0$ より大きくないので、"East" を出力する。

注意点

特になし。

別解

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

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

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