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

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

JOIG 2023 A - 末尾の文字 (AOJ 0757) (9Q, 難易度 1)

文字列の練習!

問題概要

英大文字のみからなる、長さ  N の文字列  S が与えられる。

  •  S の末尾の文字が 'G' 以外のとき: S の末尾に文字 'G' を挿入して得られる文字列を
  •  S の末尾の文字が 'G' であるとき: S の末尾の文字 'G' を削除して得られる文字列を

求めて出力せよ。

解法

文字列  S を C++ の string 型の変数 S で表すことにしよう。このとき、 S の末尾の文字は S.back() で取得できる。

この文字が G かどうかを調べて、if 文を用いて処理を分岐しよう。

S.back() != 'G' のとき

この場合は、S + 'G' を出力すれば OK。

そうでないとき

この場合は、S から末尾の文字を削除して得られる文字列を出力すればよい。文字列  S の末尾の文字を削除する処理は S.pop_back() と書ける。

C++ での解答例

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

int main() {
    int N;
    string S;
    cin >> N >> S;
    
    if (S.back() != 'G') {
        // S の末尾の文字が 'G' でないとき:S + 'G' を出力
        cout << S + 'G' <<endl;
    } else {
        // S の末尾の文字が 'G' であるとき:S の末尾の文字を削除する
        S.pop_back();
        cout << S << endl;
    }
}