本ページはプロモーションが含まれています。 プログラミング

AtCoderの基礎問題を解いてみました(解答例あり)

2023年1月8日

前回記事でご紹介した競技プログラミングで有名なAtCoderの問題(11問)を解いてみました。

前回記事[脳トレ×プログラミング]クイズ感覚で学べる競技プログラミングとは?

「プログラミング」って、難しそうなイメージはありませんか。 もちろん、分野や方向性によっては一筋縄ではいきません。 一方で、クイズ感覚で学べる「競技プログラミング」というものがあります。 書籍やネット …

続きを見る

C++で提出した解答も載せているので、ぜひ自分でやってみて見比べてみてください。

アルゴリズムの知識より思考力を求められる感じがして、程よい難しさがありました。

公式認定の初心者向け問題集「AtCoder Beginners Selection」

今回解いた問題は、「AtCoder Beginners Selection」という問題集を選びました。

元々公式でなく、一般の方が紹介したものをまとめたものの様です。

まとめ方が秀逸だったため認められた形でしょうか。

そもそものプログラミングに不安のある方へ

リンク先のように、プログラミング初心者向けの入門ページがあります。

C++のページですが、他の言語でも結構応用が可能です。

ぜひ、一度覗いてみましょう。

Windowsをお使いの場合におすすめのIDE(VisualStudio)

WindowsOSでC++を実行する場合は、「VisualStudio」がおすすめです。

前回記事で「Visual Studio Code」をご紹介しましたが、エディタではなくIDEの方です。

インストールすればほぼ設定いらずなので、まず試すのであればコチラをおすすめします。

「Visual Studio」を使う場合の設定

※今回は、「Visual Studio Community 2019」を使用しました。

  • プロジェクトは「空のプロジェクト」を選択し任意の名前「○○」を付ける
  • プロジェクトを開いたら、メニューの「デバッグ」 => 「○○のプロパティ」 => 「校正プロパティ」 => 「リンカー」 => 「システム」 => 「サブシステム」を「コンソール(/SUBSYSTEM:CONSOLE)に変更する
    • プログラムが終了しても画面が残るようになり、結果の確認が楽になります。

解いた問題とその解法の一覧(展開で答えが閲覧できるので注意)

今回解いた問題の一覧は下記の通りです。

概ね点数と難易度は連動しています。

ID 問題名 点数
PracticeA Welcome to AtCoder 100
ABC086A Product 100
ABC081A Placing Marbles 100
ABC081B Shift only 200
ABC087B Coins 200
ABC083B Some Sums 200
ABC088B Card Game for Two 200
ABC085B Kagami Mochi 200
ABC085C Otoshidama 300
ABC049C 白昼夢 300
ABC086C Traveling 300

問題文の詳細については、それぞれリンクを張りますので公式からご確認ください。

大分意訳していますので、読んでみると印象が異なる可能性があります。

問題1 PracticeA 「Welcome to AtCoder」

問題原文

登録後にやる問題として紹介されているサンプルの問題です。
簡単な四則演算と出力処理が行えれば解くことができます。

問題2 ABC086A 「Product」

問題原文
入力された2つの数字の積を計算し、奇数か偶数かを解答します。

問題3 ABC081A 「Placing Marbles」

問題原文
番号のついた3つのマスに、それぞれ1または0の数字が割り振られます。
全てのマスの内、「1」が割り振られたマスの数をカウントして解答してください。

問題4 ABC081B 「Shift only」

問題原文
全ての入力に対して、何回2で割り切れるかを調べます。
全体に対して1回ずつの判定になるため、途中で割り切れなくなった場合はそこで終了です。

問題5 ABC087B 「Coins」

問題原文
それぞれ指定された枚数までの500円、100円、50円の硬貨を使って、ぴったり入力X円になる組み合わせは何通りになるかという問題です。

尚、硬貨の枚数は合計ではありません。
50円は10枚までで100円は30枚のような状況も考えられます。

問題6 ABC083B 「Some Sums」

問題原文
入力値以下の整数の内、各桁の和が入力A以上入力B以下の数字を合計して解答します。

例としては、「155」の場合桁の総和は「1+5+5」で「11」です。
A以上B以下の条件は上の11で判定しますが、合計を計算するときは155の方で計算します。
判定は各桁の総和を、解答は数字そのものを使うということです。

問題7 ABC088B 「Card Game for Two」

問題原文
点数を競うカードゲームをしている二人がいます。
それぞれが最善となるよう交互にカードを引いた時、差がどのくらいになるかを解答する、という問題です。

問題8 ABC085B 「Kagami Mochi」

問題原文
鏡餅の枚数とそれぞれの大きさが入力値として与えられます。
下の鏡餅より上の鏡餅の方が小さいという制約の下で重ねたとき、最大で何段まで重ねられるかを解答します。

問題9 ABC085C 「Otoshidama」

問題原文
10000円札、5000円札、1000円札が合計でN枚入ったお年玉があります。
このお年玉の合計をY円としたとき、それぞれ何枚ずつであれば実現可能かを解答します。

※複数の解答パターンが考えられます。
※またY円が間違いの場合はそれぞれ-1と解答します。

問題10 ABC049C 「白昼夢」

問題原文
与えられた文字列が、4つの単語を組み合わせて実現できるかを解答します。
カウントは不要で、可能不可能を解答する形式です。

問題11 ABC086C 「Traveling」

問題原文
指定した時間後に、地点(x, y)へ到達できるかを判定します。
秒数と地点は毎回指定されるため、1回でも到達できなければ不可能の判定です。

尚、必ず移動する必要があるという制約があります。

興味をもったならまずはやってみよう

さて、競技プログラミングに興味を持てたでしょうか。

プログラミングの勉強という意味では、遠回り感が否めません。

それでも、遊び感覚で学べるのは非常に良い利点です。

色々問題をまとめている記事もあるので、数学関係に興味がなければ割り切ってパズル的な問題に絞るのもありです。

少しでも興味を持てたのであれば、まずはやってみましょう!

私はせっかくなので、paizaもやってみようと思います。

おすすめ記事をCHECK!

aptがあればapt-getは不要? 1

Debian系のパッケージ管理として「apt」が登場してから、時々「apt-getは不要!」という話を聞くことがあります。 結論から言うと、公式では「使い分けよう」が正解です。 公式の方では、次のよう …

2023年2月時点。新しくなったAWSシークレットキーの作り方。 2

AWSの管理画面は、結構頻繁に変わりますよね。 以前まではIAMとシークレットアクセスキーを同時に作成できましたが、今はその機能が見当たらなくなりました。 結論としては、IAMのユーザーを作成後に、設 …

初心者におすすめ! 失敗しないレンタルサーバー3選。 3

ある程度経験がないと、レンタルサーバーはどれも同じに見えるかもしれません。 しかし、選び方次第で、設定に2倍、3倍の時間がかかってしまうこともあります。 そこで今回は、コスパ・使いやすさに特化した3つ …

-プログラミング
-