search
LoginSignup
32

More than 5 years have passed since last update.

posted at

updated at

競技プログラミングについて紹介(初心者向け)

この記事は高知工科大学 Advent Calendar 2017の7日目の記事です.
ここでは,競技プログラミングについて軽く紹介します.
いわゆるマラソン型には触れません.(知らないから解説できない)

私はAdvent CalenderどころかQiitaもMarkdownも初挑戦なので,所々おかしい表記があるかもしれません.
「ここはこう書いたほうが良いよー!」とかあったら教えてくれると幸いです.

目次

  1. 競技プログラミングとは
  2. 簡単な問題をやってみる
  3. 緑コーダーを目指す
  4. おわりに

1.競技プログラミングとは

プログラミングの問題を短時間で沢山を解く競技です.
数学とかパズルが好きな人はハマると思います.

と言っても,その辺の面白いゲームより面白いかと言われたら微妙です.
なので,興味を持ってもらう為に,まず競プロの社会的有用性について語ります.

ざっくり言うと

  1. プログラミング能力が上がる
  2. 就活に役立つ

って所です.順番に解説します.

1.プログラミング能力が上がる

競プロは主に,考察力・発想力・実装力が身に付きます.
難しい問題になると,数学力も身に付つくらしいです
(僕はそんなレベルじゃ無いから分からない)

あと,ライブラリや言語仕様といった知識も身に付きますね.

2. 就活に役立つ

正直,こういう面で競プロが流行ってほしくは無いんですが,一番の魅力だと思っているので,あえて載せます.

大きなプログラミングコンテストの大会では,スポンサーさんから企業案内が沢山来ます.
また,成績によって開催企業への就職が有利になる企業コンテストも頻繁に開催されています.
以前は国内ではあまり見なかったのですが,今年の秋頃から頻繁に行われるようになりました.

あと,こんな記事もあります.
プログラマー採用時や社員・学生のプログラミング教育に役立つ
プログラミング能力判定サービス「TOPSIC」発表

今後,競プロがどんどん就活に用いられるようになるかもしれません.


規模の大きいものを除いて,コンテストは基本的にオンライン上で行います.
日本ではAtcoderという所が一番盛り上がっています.

この前にこんな記事を出していました.
国内最大プログラミングコンテストサイト「AtCoder」の参加者が1万人突破!
ここでは企業コンテストも頻繁に行っています.
日本語に対応しているだけでなく,終了後に解説pdf掲載+解説生配信をやってくれる良い所です.

他にも,Topcoder等色々ありますが,まずは日本人が一番とっかかりやすいAtcoderのみの紹介とします.

2.簡単な問題をやってみる

では,実際にコンテストの問題を解いてみます.
ここでは,AtcoderのABC(初心者向けコンテスト)のA問題(一番簡単な問題)を一問やります.

ABC016のA問題を使用します.

問題

12月6日は、月を日で割って割り切れる日です。日付が与えられるので月が日で割り切れるかを判定してください。

月が日で割り切れるなら YES 、割り切れないなら NO を出力せよ。出力の末尾には改行をつけること。

自分なりの解答

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

int main() {
    int m, d;
    cin >> m >> d;
    string ans = "NO";
    if (m % d == 0) ans = "YES";
    cout << ans << endl;
    return 0;
}

まず,整数を入れる箱を2つ用意します.次に,それに月と日の値を入れます.
最後に,剰余が0ならYES,そうじゃ無いならNOを出力します.

めっちゃ簡単そうじゃないですか?

このように,A問題というのは入出力と変数と条件分岐さえ分かれば解けるケースが多いです.

「コードそんなに書いた事無いし,コンテストなんて…」と心配する必要はありません.
じゃんじゃん出ちゃっておkです.

簡単な問題でも,提出して正解が出ると嬉しいものです.

3.緑コーダーを目指す

Atcoderに限らず,コンテストサイトではレーティングを色で表します.
ここでは,基本的なアルゴリズムを活用できるラインである緑色を目指すことにします.

1.AOJ本を読もう

プログラミング未経験・初心者の方は,オンラインジャッジではじめるc/c++プログラミング入門
という本を読むことをオススメします.(KUTの図書館にはありますよ!)
競プロで使うc++の基礎と同時に,基礎の典型問題の解き方を学べます.

2.コンテストに参加しよう

ここからは主にアルゴリズムの勉強です.参考書としては,

辺りがよく使われます.

しかし,範囲が広い上に,どれも実際に使えるようになるまでに時間が掛かります.
なので,パラシュート勉強法をオススメします.

とりあえずコンテスト(ABC)に出て,分からなかった所を勉強する

って感じです.コンテスト楽しいですよ.
分からない問題は,時間内の正解を諦めちゃっておkです.

コンテスト終了後は,解説pdfや解説放送を使って解けなかった問題の復習をしましょう.
蟻本・TLE本を使って,その範囲について詳しく勉強するとなお良しです.
解けた問題についても,解説pdfを読むと新たな発見があるかもしれません.

自分は,解けなかった問題が解説放送で流れるまでの間に,解説pdfと蟻本・TLE本で勉強するようにしています.

4.おわりに

競プロ勢を増やす記事を作りたいなと思い,この記事を書いました.
またこのような機会があれば,次はアルゴリズム面で何か書きたいと思います.

この記事を見て,競プロに興味を持ってくれる方が居たら嬉しいです.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
32