中百舌鳥雑記組

競技プログラミングを始めてみました。過去問や勉強したことをまとめていきます。

Atcoder Beginners Selection コード解説[1]

記事の目的

 初投稿です。

 競技プログラミングAtcoderを始めてみました。

 Atcoderを始めた人がまず最初に取り組む課題である「Atcoder Beginners Selection」を解き終えたのでまとめます。(正直n番煎じですが…)

 ここをこうするとより良いよ!!みたいなコメントはいつでも大歓迎です!

Atcoder Bigenners Selectionって?

atcoder.jp

プログラミングサイトAtcoderが提供する、いわば初心者向けの教材です。

主要な言語なら基本的になんでも使えるので、登録して一番初めにやってみましょう。プログラミングの勉強を始めたての人でも簡単に解けるA問題から、解くのに慣れが必要なB問題、数学的な考え方が必要なC問題の良問がピックアップされています。

Atcoder Beginners Selectionの場所

参加は上の画像の左上からできます。

本記事ではA問題を見ていきましょう。なお、A問題は3問ありますが、「PracticeA - Welcome to AtCoder」は割愛します。また、実装はPythonで行っています。

ABC0086A - Product

問題文

シカのAtCoDeerくんは二つの正整数 a,b を見つけました。 a と b の積が偶数か奇数か判定してください。偶数ならEven、奇数ならOddと出力してください。

いわゆるFizzBuzz問題ってやつですね。問題の解法よりAtCoDeerくんの方が気になるかもしれません…。AtCoDeerくんは他の問題にも登場するので長い付き合いになりそうですね。

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

Atcoderでは入力はすべてinput()で受け取ります。入力はすべて文字列型ですから、受け取った後に数値型に変換する必要があります。一行目のコードは受け取ってから数値型に変換するまでを行っています。(入力が数行にわたる場合は行の数だけinput()をする必要があります。)

数値型で受け取った後は、「aとbの積が偶数か奇数かを判定」して、結果を出力するだけです。基本的には2で割った余りが0か1かで判定します。

ABC081A - Placing Marbles

問題文

すぬけ君は 1,2,3 の番号がついた 3 つのマスからなるマス目を持っています。 各マスには 0 か 1 が書かれており、マス i には siが書かれています。 すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。

この問題は文字列が与えられて、その中の1の個数をカウントするというものですね。A問題はfor文が無くても解けるようにできてるらしいのですが、これも3桁の数字を調べて1の個数をカウントすればよさそうですね。

input = list(input())
cnt = 0
for i in input:
  if i == "1":
    cnt += 1
print(cnt)

pythonlist(文字列)で文字を1文字ずつリストに格納できるので、簡単に実装できました。正直for文を使わなくても3桁程度ならよさそうですね。

おわりに

はてなブログを開設したので練習がてら執筆してみました。これからも自分のモチベーション維持のため、定期的に更新していきたいと思います。とりあえず上位50%くらいの茶色を目指していきます!