ITP1_9_C カードゲームをC++で解いてみた[AIZU ONLINE JUDGE]

AIZU ONLINE JUDGE

こんにちは! mnbd(@mnbbbbbd)です。

AIZU ONLINE JUDGEの「ITP1_9_C カードゲーム」を解いてみましたので、その回答と解説をご紹介いたします。

プログラミング初心者なので、もっといい回答があるに違いありません。

あくまでも「動作はする」サンプルとしてご覧ください。

問題文

太郎と花子がカードゲームをする。二人はそれぞれn枚のカードを持っており、nターンの勝負を行う。各ターンではそれぞれ1枚ずつカードを出す。カードにはアルファベットからなる動物の名前が書かれており、辞書順で大きいものがそのターンの勝者となる。勝者には3ポイント、引き分けの場合にはそれぞれ1ポイントが加算される。

太郎と花子の手持ちのカードの情報を読み込み、ゲーム終了後のそれぞれの得点を出力するプログラムを作成せよ。

Constraints

・入力で与えられるnが1000を超えることはない。
・与えられる文字列の長さは100以下であり、アルファベットの小文字のみを含む。

Input

一行目にカードの数nが与えられる。続くn行に各ターンのカードの情報が与えられる。1つ目の文字列が太郎のカードに書かれている文字列、2つ目の文字列が花子のカードに書かれている文字列である。

Output

1つ目の数字が太郎の得点、2つ目の数字が花子の得点として1行に出力せよ。2つの数字の間に1つの空白を出力せよ。

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/9/ITP1_9_C

回答

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

int main() {
    int number;
    cin >> number;
    string taro_card, hanako_card;
    int taro_point = 0;
    int hanako_point = 0;
    for(int i = 0; i < number; i++) {
        cin >> taro_card >> hanako_card;
        if(taro_card < hanako_card) {
            hanako_point += 3;
        } else if(taro_card > hanako_card) {
            taro_point += 3;
        } else {
            taro_point += 1;
            hanako_point += 1;
        }
    }
    cout << taro_point << " " << hanako_point << endl;

    return 0;
}

解説

まずは行数を受け取り、太郎と花子のポイントを保持するための変数を確保し、その行数分のループをしています。

ループ内では、太郎と花子のカードをそれぞれstring型で受け取り、それらを比較し、問題文にあるルールでそれぞれにポイントを加算。

あとはそのポイントを出力形式に則って表示しています。

ハマったポイント

文字列の辞書順の比較をどのようにするかわかりませんでした。

学んだこと

string型の文字列を比較するとそのまま辞書的なものがわかるということを学びました。

まとめ

AIZU ONLINE JUDGEの「ITP1_9_C カードゲーム」を解いてみましたので、その回答と解説をご紹介いたしました。

少しずつですが、プログラミングの勉強をしています。
まだ初心者ですが、よかったらつながっていただけると嬉しいです。
Twitterアカウント(@mnbbbbbd

以上です。
読んでいただきありがとうございました!