見出し画像

【AtCoder】「Pythonは簡単」って言ったの誰?初心者が最初にぶつかった「3つの壁」と解決策



こんにちは、Kazu | Macで元を取りたい学生 × 賢い散財です。

お正月休みも終わり、活動再開です。 僕は休みの間、以前から気になっていた「AtCoder(競技プログラミング)」に挑戦していました。

「エンジニアになるなら、アルゴリズム力(論理的思考力)は必須」 そう聞いて意気揚々とPCに向かったのですが……正直に言います。

「問題の意味以前に、Pythonの書き方が分からない」

Webアプリを作るPythonと、競プロのPythonはもはや別物でした。 今回は、文系学生(または初心者)の僕が、AtCoderの「A問題(一番簡単な問題)」を解くまでに躓いた、超・初歩的な「3つの壁」をシェアします。

同じところで挫折しかけている人の助けになれば嬉しいです。


そもそも、なぜPythonを選んだのか?

C++の方が実行速度は速いそうですが、僕は迷わずPythonを選びました。理由はシンプルです。

  1. コードが短い: 英語を書くような感覚で直感的に書ける。

  2. 人気がある: 将来AIやデータ分析をする時にも役立つ。

  3. 環境構築が楽: ブラウザ上ですぐに書ける。

初心者が「アルゴリズム」そのものに集中するには、Pythonが最適解だと思います。


最初の壁:入力(input)の呪文が分からない

AtCoderでは、「数値を受け取る」ところから自分で書かないといけません。 これが最初の難関でした。

1. 文字と数字の罠

Python

a = input() # 例えば「10」と入力
b = input() # 例えば「20」と入力
print(a + b)

これ、答えは「30」になると思いますよね? 正解は「1020」です。

input() は全てのデータを「文字(String)」として受け取るので、int() で「整数」に変換しないといけません。

Python

a = int(input()) # これなら数値の「10」になる

これに気づくまで30分悩みました…。

2. 横並びの数字を受け取る呪文

「10 20 30」のように、横にスペース区切りで並んだ数字を受け取る時。 いちいち調べてられいないので、この呪文を辞書登録しました。

Python

# 横並びの数値をリスト(配列)にする魔法
L = list(map(int, input().split()))

意味は分からなくても、まずは「これコピペすればOK」と割り切るのが挫折しないコツです。


2つ目の壁:インデント(空白)のズレ

Pythonは「カッコ { }」を使わない代わりに、「行頭の空白(インデント)」でコードのまとまりを判断します。

Python

if n > 10:
    print("Yes") # ここに半角スペース4つが必要!
print("No")

このスペースが1個でもズレていると、エラー(IndentationError)が出て動きません。 コピペした時によくズレるので、「Tabキー」を押して整える癖をつけました。


3つ目の壁:二重ループでタイムオーバー

「答えは合っているのに不正解(TLE)」になることがありました。 TLEとは「Time Limit Exceeded(時間切れ)」のことです。

例えば、「1万個のデータ」に対して、さらに「1万回」計算するようなコード(二重ループ)を書くと、計算回数が1億回を超えてしまいます。

「for文の中にfor文を書くと、計算が遅くなる」 初心者のうちは、これだけ覚えておけばOKです。 「どうやったらfor文を1回で済ませられるか?」を考えるのが、パズルみたいで少し楽しくなってきました。


初心者を救う「神サイト」2選

右も左も分からない僕を助けてくれたのは、この2つのサイトです。

1. AtCoder Beginners Selection

「最初に解くべき10問」がまとめられています。 いきなりコンテストに出るのではなく、まずはこれを全部解いて「AC(正解)」の緑色の文字を見る快感を味わってください。

2. アルゴ式

 AtCoderの問題がまだ難しく感じる人向け。 「入力を受け取る」「足し算をする」といった、もっと細かい部品単位で練習できます。教科書として最強です。


まとめ:千里の道も「A問題」から


最初は「標準入力って何?」というレベルでしたが、3日間触り続けて、ようやく簡単な問題なら自力で解けるようになってきました。

緑色の「AC」が出た時の達成感は、ゲームでボスを倒した時に似ています。 今年はまず、「茶色コーダー(上位50%)」を目指して、1日1問コツコツ解いていこうと思います。


いいなと思ったら応援しよう!

Kazu | Macで元を取りたい学生 × 賢い散財 燃料と投資への還元 この記事が役に立ったら、コーヒー1杯分を奢っていただけると嬉しいです。いただいたサポートは全額、僕の「カフェイン(作業燃料)」と、次なる「ガジェット検証費」に投資されます。学生エンジニアの生存と、より良い記事執筆のために応援よろしくお願いします!

この記事が参加している募集