はじめに
TIGの須田です。
毎日1問、LeetCodeの問題を解くことを日課にしています。特にアルゴリズムとデータベースのセクションに取り組んでいるのですが、先日無事データベースセクションの課題を全て解き終えました。そこで次は自分でも問題を提供する側になりたいと思い、初めて問題を投稿し無事採用されたのでその過程についてまとめてみました。
LeetCodeとは
様々なアルゴリズムの問題だけでなく、SQLやシェルスクリプトなどの問題が解けるサービスです。
また有名な企業の採用面接時に出題されるコーディングテストの問題なども解くことができます。
これらの問題はユーザーがコントリビュートできます。投稿した問題はLeetCode側で内容の確認が行われ、その後無事採用されれば正式に問題としてサイト上に公開されます。
問題を作成するステップ
問題投稿までのステップをみてみましょう。キャプチャにある文章は私が実際に投稿した際のものです。
問題のコントリビュートはこちらのリンクからできます。
まずこの問題をなぜ投稿しようと思ったのかといった背景を記載します。
私は自分が考えた問題を通して具体的に何を学ぶことができるのか、そしてそれがどう役に立つのかを明記しました。
LeetCode側で推奨の記述が表示されているので、それに従って答えを記述していきました。
次に投稿する先のカテゴリと問題のタイトル、実際の問題文を入力します。
問題文を作成する際は、LeetCodeで評価が高い問題なんかを参考に文章を書いていきました。よく使われる言い回しなどがあるので、それらを参考にして文章を書いていきました。解く人が何を求められているのかを明確に理解できるように、求める回答は具体的に記載するように心がけました。
そして、次に回答となるソースコードやSQLを記載します(答えのネタばれ回避のためここだけ実際投稿した内容とは異なる回答を記載しています笑)。
最後にテストケースを入力します。LeetCodeでは、書いたコードをブラウザ上で実行しながら問題を解くことができます。その際に、問題ごとにテストケース(インプットと答えとなる正解データ)が用意されており、これらをクリアする必要があります。問題を投稿する際には、こうしたテストケースをあわせて用意する必要があります。テストケースの書き方は作る問題のタイプによって異なってくるため、他の問題を参考にしながら用意しました。
最後にSubmitして完了です。
私の場合ですと1か月ほどで問題が公開されました。
問題文を英語で書くの大変じゃない?
LeetCodeの問題はとても簡潔に書かれているものが多く見受けられます。
問題文は簡潔でわかりやすいものほど、解答者もなにを求められているのかがわかりやすくコーディングに専念しやすくなるのかなと想像しています。そのため、英語での長文や難しい表現をする必要はなく、むしろ簡単で具体的に表現を心がけることが大事かなと思いました。
またLeetCode側で問題文をチェックし、文章などを適宜補ってくれますので安心してください。
まとめ
問題作成ではどんなにシンプルな問題であっても、この問題はどういった意図で出題するのか、何を解答者に期待するのかを深く考えさせられます。
この過程で既に知っている知識であっても新しい気づきが得られたり、これまで解いてきた問題もきっと作者はこういう意図があったのかなと別の観点で考えられるようになりました。
みなさまの出題された問題を今後解けることをとても楽しみにしています!