Help us understand the problem. What is going on with this article?

AtCoderチュートリアル(Python編)

はじめに

本記事はVolare Advent Calendar 2019の14日目の担当分です。
私は関西の情報系の学生で、学校法人角川ドワンゴ学園が運営するN高等学校にてプログラミングTAとしてインターンをさせてもらっています。その業務の中でプログラミングに興味のある生徒に何から始めたらよいのか度々質問してもらうのですが、そもそもプログラミングを使って作りたいものが特に決まっていないことがあります。その場合にプログラミングの入門の一つの選択肢として紹介している「競技プログラミング」についての記事を初心者向けに書かせていただくことにしました。

競技プログラミングとは

  • 与えられた入力から求められている出力を満たすプログラムを作成する競技
  • 週末にリアルタイムのオンラインコンテストが開催されており、レーテイングで自分の実力を数値化することができる
  • 日本語で競技プログラミングの問題を解けるサイトとしてはAtCoderAOJなどが有名

ざっくりとこんな感じの問題を解く競技です。
スクリーンショット 2019-12-13 14.01.25.png

この記事について

読者の想定

  • プログラミングおよび競技プログラミングに関心のある人だれでも
    • プログラミング文法をProgateを一通りするくらい勉強していると理解できて楽しめます
    • 初学者のひとでもなんとなくどういうものか知ることはできると思います
    • 特にプログラミング初学者に寄せています ので、できる人はマサカリを投げてください

なぜPythonなのか

競技プログラミングといえばC++の記事や書籍などの情報が多いですが、
Pythonは学習コストが低く、少ない記述量で書けるため初学者の学習に向いていると思い選択しました。
また、Progateなどの初心者向けの教材が豊富であることも学習しやすい理由の一つにあります。

Progate

この記事を楽しむための必要知識

プログラミング

  • Pythonの基礎的な文法を知っている
    • 逐次処理・条件分岐・反復・変数・演算子(+ ー * など)
  • Pythonを手元で実行する環境が整っている
    • まだの場合コチラの記事で先に環境構築をするといいかもしれません。

数学

  • 四則演算と負の数の概念

構成

  • まず、競技プログラミングに参加できるようにAtcoderの会員登録をする
  • 競技プログラミングのコンテストを運営しているAtCoderの問題1題をプログラムだけでなく思考の過程にそって回答を作成、問題を提出するまでの流れを記事に沿って行うことで競技プログラミングの参加方法を知る

AtCoderで回答を提出する準備

新規登録のページからAtcoderの会員登録をする

本編

今回の記事ではAtcoder Begginer Contest106のA問題を例に競技プログラミングの解き方を解説していきます。リンクを開いて画面を横並びにしてやるといいかもしれません。

ざっくりとした解き方

  1. 問題文を読む
  2. 入力例・出力例を確認する
  3. 解き方を考える
  4. プログラムを書いていく
  5. 提出

1. 問題文を読む

問題の要素をざっくりと抽出する

  • 条件
    • 縦A[yard]、横B[yard]の畑がある
    • 縦と横にそれぞれ幅1[yard]の道があり畑の面積に含まれない
  • 出力
    • 畑の面積[yard]

2. 入力・出力を確認する

  • 入力されるもの

    • 2以上100以下の整数がスペースで区切られて2個入力される
  • 出力するもの

    • 畑の面積[yard]を出力する

3. 解き方を考える

まず、求める面積を算数の式に起こしてみる。
今回の問題においては、道が畑のどこにあっても求める面積は同じなので式は以下の図のようになります。

4.プログラムを書いていく

面積を計算する式が求められたので実際にプログラムを書いていきます。

処理の順序は
1. 入力を受け付ける
2. 面積を求める
3. 求めた面積を出力する

なので順番に実装していきます

入力部分.py
A, B = map(int, input().split())
面積計算.py
S = (A-1) * (B-1)
出力.py
print(S)

完成したプログラムは以下のようになります。

ABC106_A.py
A, B = map(int, input().split())

S = (A-1)*(B-1)

print(S)

5.提出

問題文の下部に提出用のフォームがあるので、そこに先ほど作成したプログラムを貼り付けて提出します。

*注意点*

  • 言語をPython3を選択するのを忘れないようにする
  • 貼り付ける際に余計な空白が入っていないことを確認する スクリーンショット 2019-12-13 13.24.47.png

このようにACと表示されていたら正解です
スクリーンショット 2019-12-13 13.26.17.png

以上がAtCoderで競技プログラミングをする際の問題提出までの一連の流れです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした