AIZU ONLINE JUDGE ITP1_9_Cをpythonで解いてみた

python

本サイト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つの空白を出力せよ。

Sample Input

3
cat dog
fish fish
lion tiger

Sample Output

1 7

解答例

n = int(input())
T = 0
H = 0
for i in range(n):
    card_t, card_h = input().split()
    if card_t == card_h:
        T += 1
        H += 1
    else:
        if card_h > card_t:
            H += 3
        else:
            T += 3
print(T, H)

解説

以下のように解いていきます。

  1. 1つの整数の読み込み
  2. n回の太郎、花子の2つの文字列の読み込み
  3. 得点の表示

キーボードから文字列を受け取るときに使用するinput関数をint関数で囲み、整数値として受け取ります。

# input関数をint関数で囲み、整数値として変数に代入
n = int(input())

※サイト内「AIZU ONLINE JUDGE ITP1_1_Bをpythonで解いてみた」の、input関数とはに使用方法が書かれておりますのでぜひご覧ください。

まずは、太郎と花子の点数を設定する変数T,Hを用意します。

続いて、for文を使用し、イテラブルをrange(n)とすることで、1.1つの整数の読み込みで読み込んだ回数分、太郎と花子の文字列を読み込みます。

for文の中で、太郎と花子の文字列を受け取る変数をcard_t, card_hとし、input().split()でそれぞれに代入します。

もし、2人が同じ文字列を受け取った場合、太郎、花子どちらも1点追加します。

そうでない場合は、card_h > card_tを比較し花子の方が辞書順で早い場合に花子に3点、太郎の方が辞書順で早い場合に太郎に3点追加します。

# 太郎と花子の点数を初期化
T = 0
H = 0
# 1で読み込んだ回数分forループを回す
for i in range(n):
    # 太郎の文字列(card_t)と花子の文字列(card_h)の読み込み
    card_t, card_h = input().split()
    # 太郎と花子が同じ文字列を受け取った場合
    if card_t == card_h:
        # どちらも1点追加
        T += 1
        H += 1
    else:
        # 花子の方が辞書順で早い場合
        if card_h > card_t:
            # 花子に+3点
            H += 3
        # 太郎の方が辞書順で早い場合
        else:
            # 太郎に+3点
            T += 3

print文を使用し、太郎、花子の順で得点を表示します。

# 太郎、花子の順で得点を表示
print(T, H)

※サイト内の「AIZU ONLINE JUDGE ITP1_1_Aをpythonで解いてみた」の、print関数とはにprint関数の使用方法が書かれておりますのでよかったらご覧ください。

最後に、もう一度プログラムを確認してみましょう。

# input関数をint関数で囲み、整数値として変数に代入
n = int(input())
# 太郎と花子の点数を初期化
T = 0
H = 0
# 1で読み込んだ回数分forループを回す
for i in range(n):
    # 太郎の文字列(card_t)と花子の文字列(card_h)の読み込み
    card_t, card_h = input().split()
    # 太郎と花子が同じ文字列を受け取った場合
    if card_t == card_h:
        # どちらも1点追加
        T += 1
        H += 1
    else:
        # 花子の方が辞書順で早い場合
        if card_h > card_t:
            # 花子に+3点
            H += 3
        # 太郎の方が辞書順で早い場合
        else:
            # 太郎に+3点
            T += 3
# 太郎、花子の順で得点を表示
print(T, H)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次