Daily Coding Problem: プログラミング・パズルを受信トレイへ

他の職業と同じように、優れたプログラマーになるための鍵は、練習することです。頻繁に一貫して練習することは、自分自身に挑戦し、プログラミングスキルを向上させるための素晴らしい方法であり、間違いなく最良の方法です。

私たちの多くは、マイクロソフト、グーグル、フェイスブックなどの一流ハイテク企業で働きたいという願望を抱いています。しかし、多くの人はそのような一流企業に応募することすら怖いと感じ、そのような企業のポジションに就くには威圧的であったり、適格性に欠けると感じたりしています。

面接では、自信と能力があるかどうかが、夢の仕事を得るか否かの分かれ目となるため、一流企業の面接やその他の面接では、冷静さと準備が重要です。

面接で自信を持つためにできることはたくさんありますが、私が思うに、最も良い方法は単純に練習することです。その場で問題を解決できることは、口頭で言うよりも、面接官にあなたのスキルを伝えることができます。

個人的な問題やプロジェクト、本などのリソース、オンラインのサービスなど、練習する方法はたくさんあります。Daily Coding Problemはそのようなサービスの一つです。

Daily Coding Problemとは何ですか?

Daily Coding Problemは、毎朝1つのコーディング問題をメールで送ってくれる、シンプルでとても便利なプラットフォームです。これによって、長期間にわたり、一貫して、十分な頻度で練習することができます。

1日にたった1つの問題を練習するだけで、スキルセットと自信に大きな影響を与えることができ、特に、近い将来、一流の技術企業で直面する可能性のあるタスクに直面したときに、大きな影響を与えることができるのです。

彼らの問題の最も良いところは、他の受験者がそこの面接セッションで直面した一流企業の実際の問題や質問を使用していることです。そして、個人的には、彼らの哲学に賛同しています – 準備不足よりも、準備しすぎる方が常に良いのです。

独学の開発者でも、大学を卒業したばかりの人でも、スキルを磨こうとする経験豊富なプロの開発者でも、誰でもこのサービスを利用することができます。最も重要なのは、与えられた問題を解決するために、あなたが自由に使える概念、データ構造、アルゴリズムを理解していることです。

そして、DCPの最も優れた点の1つは、これらのコーディング問題を無料で受信箱に届けることです。また、少額の料金で、メールで送られてくるすべての問題の解答と詳細な解説を、問題の翌日に送ってくれるので、自分で解決する時間を確保することができます。

例題

各問題のメールには、発祥の会社、問題の定式化、およびコード例が添付されています。ここでは、DCPのコーディング問題のひとつと、それに対応する詳細な解答を紹介します。

Given two singly linked lists that intersect at some point, find the intersecting node. The lists are non-cyclical.


For example, given A = 3 -> 7 -> 8 -> 10 and B = 99 -> 1 -> 8 -> 10, return the node with value 8.


In this example, assume nodes with the same value are the exact same node objects.


Do this in O(M + N) time (where M and N are the lengths of the lists) and constant space.


この問題は、Googleが実際の面接で出題したものです。

この問題をじっくり読んで、自分ならどう解くか、少し考えてから進めてください。DCPのFAQによると、面接では1時間くらいで解けるはずなので、家でもそのくらいの時間で解きましょう。

解けたと思ったとき、あるいは行き詰まったときは、Daily Coding Problemが提供する詳しい解答を参考にしてください。

We might start this problem by first ignoring the time and space constraints, in order to get a better grasp of the problem.


Naively, we could iterate through one of the lists and add each node to a set or dictionary, then we could iterate over the other list and check each node we're looking at to see if it's in the set. Then we'd return the first node that is present in the set. This takes O(M + N) time but also O(max(M, N)) space (since we don't know initially which list is longer). How can we reduce the amount of space we need?


We can get around the space constraint with the following trick: first, get the length of both lists. Find the difference between the two, and then keep two pointers at the head of each list. Move the pointer of the larger list up by the difference, and then move the pointers forward in conjunction and check if they match.


def length(head):
    if not head:
        return 0
    return 1 + length(head.next)


def intersection(a, b):
    m, n = length(a), length(b)
    cur_a, cur_b = a, b


if m > n:
        for _ in range(m - n):
            cur_a = cur_a.next
    else:
        for _ in range(n - m):
            cur_b = cur_b.next


while cur_a != cur_b:
        cur_a = cur_a.next
        cur_b = cur_b.next
    return cur_a


DCPでは、このように、各問題を解いて実際に解法を理解し、自力で解けた場合に活用したロジックを補強するために、深く丁寧な解説を提供しています。

このように、これらの問題は論理性と創造性の両方に大きく依存しており、それゆえに非常に難しい問題です。しかし、十分に練習し、問題や解決策をどう考えるか、どんな道具があるかなど、これらの問題の裏にあるコツを学べば、ずっと簡単になるはずです。

どのプログラミング言語?

現在、DCPはPythonでソリューションを提供しています。Pythonは非常に有名で、疑似コードに似ており、また学習も簡単だからです。Pythonのコードは、そのシンプルな構文とわかりやすいプログラミングスタイルから、他の言語への翻訳が非常に簡単であるため、ソリューションの選択肢としては適していると思われます。

さらに、DCPは、Java、JavaScript、C++、Rubyなど、他の言語にもソリューションのプールを拡大しようとしている。

価格について

このサービスの最大の特徴は、登録と毎朝の問題配信が無料であることです。

一方、解答をメールで受け取るには、わずかな料金を支払う必要があります。

これはドイツのスターバックスのコーヒー1杯分より少し高いくらいで、アメリカでは平均的なコーヒー2杯分の値段です。

コーヒー2杯分の値段で、毎月約30の実際の面接問題を解き、スキルと自信を大幅に向上させることができるのです。これだけのリターンを得られる投資は、他にはなかなかありません。

その他の学習用リソース

幸運なことに、Daily Coding Problemだけがオンラインで練習や学習ができる場所ではないのです。

もし本がお好きなら、これらを見てみてください。

  • コーディング面接を突破する
  • すべてのスキルレベルのための最高のJavaの本
  • すべてのスキルレベルのための最高のPythonの本
  • すべてのスキルレベルのための最高の機械学習の本

もしあなたが大きな面接を控えているなら、仕事を獲得するチャンスを高めるのに役立ついくつかのヒントを読むこともお勧めします。

  • Python開発者の面接の準備

また、現在世界で最も需要があり人気のあるプログラミング言語に関する記事を読みたい場合は、Node、Python、またはJavaの記事をチェックしてください。

ハッピーコーディング

タイトルとURLをコピーしました