【python】Atcoderに挑戦しよう②

Atcoderに挑戦、第2回目やっていきます。

今回は、AtCoder Beginners Selectionの2問目と3問目の解答、解説をしていきます。

AtCoderについては、第1回目で説明をしていますのでまだご覧になっていない方はこちらからご覧ください!

AtCoderに挑戦しよう①

Product

【問題】

シカのAtCoderくんは二つの正整数 a,b を見つけました。 aと b の積が偶数か奇数か判定してください。

【制約】

・1≦a,b≦10000

・a,bは整数

【入力】

a b

【出力】

積が奇数なら”Odd”、積が偶数なら”Even”と出力せよ

【入力例】

5 7

【出力例】

Odd

5×7は奇数なので”Odd”を出力します

 

【解答例】

a,b=map(int,input().split())
c=a*b
if c%2==1:
  print("Odd")
else:
  print("Even")

それでは、1行ずつ解説をしていきましょう。

1行目では、map()関数とint()関数を使ってキーボードからの入力を整数型に変換し、a,bに代入しています。map()関数やsplit()関数については、AtCoderに挑戦しよう①で詳しく解説しています!

お次の2行目では、aとbの積をcに代入していますね。

3行目ではifを用いた条件分岐が出てきます。また、数値演算子の%と、比較演算子の==も出てきています。

例えば、a%bでは、aをbで割った余りを返してくれます。

==は、右辺と左辺の数値が等しいかどうかをTrueかFalseという論理値で示してくれる演算子でしたね!

このifを用いた条件分岐では、「aをbで割った余りが1であるかどうか」という分岐を作っていることになります。余りが1ということは、その整数は奇数ということですよね。そのためこれがTrueであれば、print()によってOddを出力し、Falseであれば、Evenを出力することになります。

これで、入力された二つの整数a,bの積が奇数か偶数かを判定するプログラムを書くことができました!

Placing Marbles

【問題文】

すぬけ君は1,2,3の番号がついた3つのマスからなるマス目を持っています。各マスには’0’か’1’が書かれており、マス i には Si が書かれています。

すぬけ君は’1’が書かれたマスにビー玉を置きます。ビー玉が置かれるマスがいくつあるか求めてください。

【制約】

・S₁,S₂,S₃は’1’あるいは’0′

【入力】

S₁S₂S₃

【出力】

答えを出力せよ

【入力例】

101

【出力例】

2

マス1,3にビー玉が置かれるため、ビー玉が置かれるマスの数は2ですね。

【解答例】

a=input()
b=a.count("1")
print(b)

それでは見ていきましょう。

今回のポイントはcount()メソッドです。詳しくはこのページの最後で解説していますが、一言でいうと、「文字列の中から指定した文字列を検索し、その個数を返す」メソッドです。

つまり、今回はinput()で入力される文字列は数値型に変換する必要がないので、一行目ではそのままaに代入しています。

二行目ではcount()メソッドを使って、aという文字列の中に何個”1″という文字列が含まれているかを調べています。そしてその個数をbに代入しています。

最後にprint()を用いてbを出力してあげれば、この問題はクリアとなります。

count()

ここでは今回出てきたcount()メソッドについて詳しく説明していきます。

上述した通り、count()は「文字列の中から指定した文字列を検索し、その個数を返す」役割を持ちます。書式は次の通りです。

文字列.count(文字列)

また、count()は検索範囲を指定することもできます。書式は次の通りです。

文字列.count(文字列,開始位置,終了位置)

例えば、次のようになります。

>>> s="good morning"
>>> a=s.count("o",0,6)
>>> print(a)
2

ここでは文字列”good morning”に含まれる”o”の数を調べていますが、開始位置が0、終了位置が6となっています。この数字はインデックス番号を表していて、文字列の最初の文字が0で、そこから1ずつ増えていきます。

また、検索範囲は、開始位置から終了位置の手前までなので、終了位置として指定したインデックス番号の文字は検索対象とならないので注意してください。

検索範囲では終了位置を省略することもできます。その場合は、開始位置から最後までが検索範囲となります。

終わりに

いかがでしたでしょうか。まだまだシンプルな内容が続きますが、ここで少しでも気になったことがあれば、その疑問はその都度解消していくようんいしましょう。質問も大歓迎です(#^^#)

では、また次の記事でお会いしましょう(^^)/

 

次の記事

【python】AtCoderに挑戦しよう③

コメントを残す

メールアドレスが公開されることはありません。