こんにちは!seiです!
LeetCodeとAtCoderは、どちらもアルゴリズムやデータ構造を学ぶことができるプラットフォームですが、以下のような悩みはありませんか?
- LeetCodeとAtCoderどちらを始めるか迷っている…
- LeetCodeとAtCoderの難易度の差が知りたい!
今回はそんな方に向けた記事です。
LeetCodeとAtCoderの難易度比較
結論から言うと
一方、AtCoderの難易度は、一番ベーシックなコンテストABC(AtCoder Beginner Contest)ではA,B,C,D,E,Fの6つに分かれています。
僕はLeetcodeを半年ほど、AtCoderを一か月ほどやっていますが、難易度のばらつき具合はAtCoderのほうが大きいと感じます。
つまり難しい問題はAtCoderのほうが難しく、簡単な問題はAtCoderのほうが簡単だということです。
大体の難易度の目安は以下の表のような感じです。
Atcoder | LeetCode |
A,B | Easy |
C,D | Medium |
E | Hard |
F |
Easyのレベルに関して、具体的な問題で見てみましょう。
AtcoderのA問題
https://atcoder.jp/contests/abc300/tasks/abc300_a
標準入力から受けとった二つの値を足し算して、与えられた候補に存在すればそのindexを出力するだけですね。if文とfor文ができれば簡単です。
AtCoderのB問題
https://atcoder.jp/contests/abc300/tasks/abc300_b
文字列のmapが二つ与えられるので、ずらして一致するか判定すればよいですね。一個ずつずらす操作が分かれば手がつきそうです。
LeetCodeのEasy問題
https://leetcode.com/problems/roman-to-integer/
ローマ数字を算用数字に変換する問題ですね。与えられたローマ数字を前から順に読んでいく場合、基本大きいシンボルから出現することを利用すれば解けそうです。(大きいシンボルから出てこないときは4や9に10^nをかけた数字の時)
比べてみてみるとLeetCodeのEasy問題のほうがAtCoderのA問題よりは明らかに難しそうです。
他の難易度についても、大体上の表のようになっていると思いますので確かめてみてください。
今から始めるならAtCoderがおすすめな理由
今からアルゴリズムの学習や競プロの為に始めるなら絶対にAtCoderがおすすめです!なぜなら
- 日本語解説がある
- 問題のレベルが幅広く、とっつきやすい問題が多い
- 計算量について知識が深まる
- コンテストがあり、自分の実力が可視化できる
日本語解説がある
僕はLeetCodeから始めましたが、解説が全部英語なのがきつかったです。
数学用語はさすがに知らないので、いちいちdeepLで翻訳したりしてました。抽象的な概念の話も出てくるので英語がネイティブ並みにできる人じゃないと厳しいんじゃないかなと感じました。
初めからAtCoderでやっとけばもっと学習速度が速かったと思っています。
問題のレベルが幅広く、とっつきやすい問題が多い
AtCoderは問題のレベルが6段階くらいあって取り組みやすいです。LeetCodeだとEasyの中でも大分難易度の差があります。
LeetCodeには二分木のpre-ordeer,post-order等、
Easyからアルゴリズムの知識を使わないといけない問題もあるので、完全初心者にはAtCoderがおすすめです。
計算量について知識が深まる
この解説にはどうして今回このアルゴリズムを用いたのかや、普通に行うとどのくらいの計算量なのかについて言及があることが多いです。
加えて公式の解説動画がある場合もあります。実際に解いていく過程を見せてくれるので、とてもわかりやすいです。
一方でLeetCodeはプレミアム会員(課金)にならないと解説が見れないものもあります。
一般の方が軽く解説してくれているものもありますが、計算量についての言及があまりない印象です。
計算量についてしっかり知識を付けたいのであればAtCoder一択だと思います。
コンテストがあり、自分の実力が可視化できる
AtCoderは毎週コンテストが開催されています。コンテストでは制限時間内に問題をどれだけ解けるかを競います。大体100分くらいです。
解けた問題の合計ポイントの高い順に順位がつきます。同点の場合は解いた時間が早い順になります。
全参加者中の自分の位置が分かり、かなりモチベーションに繋がります!
実はLeetCodeも開催されているようですが、日本人の参加者は少ないようです。
問題文も英語なので、速さが求められている競プロではAtCoderのほうが良い気がします。
LeetCode、AtCoderのメリットデメリット
AtCoderのメリット
- 日本語で学習しやすい
- コミュニティが活発
- 問題レベルが幅広い
上記でも述べましたが、とにかくLeetCodeより学習しやすいです。日本人ならAtCoder使ったほうが良いと思います。
Atcoerのデメリット
- テストケースに引っかかってもテストケースの内容が見れない
ただ、終わったコンテストについては時間がたつと、以下のURLにテストケースが公開されます!
https://atcoder.jp/posts/20
LeetCodeのメリット
- 分野ごとに学習できる(Explore)
- 標準入力から受け取らなくても良い
- テストケースが分かる
- 世界で見るとAtCoderよりもプレイヤーが圧倒的に多い
LeetCodeのほうが優れている点は、分野ごとに学習しやすい点だと思います。
以下のようにExploreから分野ごとの学習が可能です。ただ、課金しないと見れない問題もあります。
LeetCodeは標準入力ではなくて、あらかじめ関数が用意されていて、その引数に値が入った状態でコードを書いていきます。
あとはエラーになった際にきちんとテストケースが出てくるのが有難いですね!当然ですが、世界全体でみるとLeetCodeのほうが人気があります。
LeetCodeのデメリット
- 英語がつらい
- 課金しないと見れない部分がある
とにかく英語がつらいです(笑)
もともとアルゴリズム知ってるなら理解しやすいですが、難しい概念をわざわざ英語で理解しに行く必要がないと思います。
あと課金しないと解説見れないのもあるので残念です…
これからアルゴリズムを勉強する方へ
アルゴリズム初心者は以下の書籍がおすすめです。全探索、再起関数、動的計画法等、AtCoderの解説でよく出てくるアルゴリズムが分かりやすく紹介されています。
「あのアルゴリズム何だっけ?」となった場合に辞書代わりに重宝します。
C++で実際に動くコードが乗っているのもうれしいです。
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) 新品価格 |
AtCoderをはじめよう!
早速AtCoderを始めたくなったあなたには以下の記事を見てみてください。
勉強方法も記載しています。
LeetCodeを半年、AtCoderを1か月おこなってきた感想と経験談
自分は情報系や数学科ではないので、アルゴリズムについての知識が皆無でした(´;ω;`)
(まぁ業務ではほとんど使わないんですけど)
アルゴリズムの学習のためにLeetCodeを始めましたが、LeetCodeはなかなか難しくて最初はめちゃくちゃ時間かかってました。
LeetCodeは前の会社(外資系)の先輩方がやっていたので僕も始めましたが、
今思うと、エンジニアとして仕事をしながらだとなかなか時間が取れないことが多いので、より学習効率がよいプラットフォームを選択すればよかったなと感じています。
アルゴリズムを学ぶ意義は計算量の削減にあると思っているのですが、計算量についてどう見積もればよいのかはLeetCodeやってる間はあまり身につきませんでした。(こんなアルゴリズムがあるんだくらいの認識)
AtCoderやるようになって一か月くらいですが、かなり計算量を見積もることができるようになりました!C問題までなら時間かければ大体解けるかなくらいのレベルです。
まだまだ実力は足りていませんが、引き続き学習していこうと思います!