解答解説はどのように勉強するべきですか?

Written by Recursion
11月 7, 2021

「上達への近道は模倣すること」とよく言われるように、プログラミングにおいて上級者のコードを模倣することは非常に重要です。上級者のコードを真似することで、開発に必要なDRY、可読性、一貫性を意識したコードの書き方を効率的に身につけることができます。

初心者向けの問題を除く模範解答の多くは計算量やDRYを意識して作成されています。模範解答を見る方法はこちらの記事で解説しています。

模範解答を見てみよう

それではユーザーのコードと模範解答を比較してみましょう。

ID98 山型

配列heightsが与えられるので、山型になっているかチェックするisMountainという関数を定義してください。

ユーザーコード例:
計算が煩雑で非常に理解しづらいコード


def isMountain(height):
    montain = [0]*(len(height)-1)
    a = {}
    b = {}
    top = False
    minus = len(height)

for i in range(1, len(height)):
    if height[i]-height[i-1] > 0:
    montain[i-1] = 1

    elif height[i]-height[i-1] < 0:

        if top == False:
            minus = i-1
            top = True
            montain[i-1] = -1
    
        else:
            montain[i-1] = 0

        if set(montain[:minus]) == {1} and set(montain[minus:]) == {-1}:
            return True
        else:
            return False

模範解答:
無駄な計算が一切なく、スマートでクリーンなコード


def isMountain(height):
    l = len(height)
    if l <= 0 or height[0] > height[1]: return False
    # 最大値・最小値・インデックスの初期値
    maxVal = -float('inf')
    minVal = float('inf')
    i = 0

    # 昇順が終わるまで処理を繰り返します
    while i < l and height[i] > maxVal:
        maxVal = height[i]
        i += 1

    # 昇順のみの配列の場合、falseを返します
    if i == l: return False

    # 降順が終わるまで処理を繰り返します
    while i < l and height[i] < minVal:
        minVal = height[i]
        i += 1

    # 配列の末尾まで降順が続いていなかったらfalseを返します
    return i == l

アウトプットが最も重要

ハードコードでも無駄の多いコードでも良いので、必ず自分で問題を解いてコンテンツで学習したことをアウトプットしてください。アウトプットしている最中が最も実力が身につきます。

中上級者向け:
一度合格したコードを以下の点に気をつけてリファクタリングを行ってください。

  • 無駄な計算は行われていないか
  • 可読性は意識されているか
  • DRYを意識しているか

変数の命名や関数の分解を意識しながらコードの書き方を学習し、何も見らずに同じように解いてみましょう。特にプログラミング暦が浅い間は必ず模範解答の書き方を復習することで良い型を身につけてください。Recursionのユーザーでも模範解答を勉強したユーザーと自己流で解いただけのユーザーで実力に大きな差が生まれています。

Recursionのプロジェクトを使って文系から有名企業の内定獲得|もーよんさんインタビュー

関連記事
  • 問題の解答解説はどうやって見ることができますか?
  • お気に入りに追加した問題はどこで閲覧することができますか?
Leave A Comment コメントをキャンセル

CAPTCHA


email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

カテゴリー
  • コンテンツ 0
    • 一般 7
    • 機能 7
    • 学習方法 4
  • コーディング問題 0
    • 一般 5
    • 問題を解く 5
    • エディタ 8
    • テストケース 5
    • テスト & 提出 4
    • 解説 3
  • コミュニティ 0
    • 一般 2
    • 機能 1
  • アカウント設定 0
    • 一般 5
    • カスタマイズ 3
    • 退会 2
  • 請求書 0
    • 一般 2
    • お支払い 6
  • その他 3
よく読まれている記事
  • 学習ロードマップの使い方
  • 学習期間はどれくらいですか?
  • 初級の2周目をJavaでするべきか、中級に進むべきでしょうか?
  • コミュニティはどうやって入ることができますか?
  • 問題の解答解説はどうやって見ることができますか?
  • プロモコードの使い方を教えてください
  • コース内のエディタはどうやって学習するのがおすすめですか?
  • 中学校の数学の知識しかありませんが、ついていけると思いますか?
  • 解答解説はどのように勉強するべきですか?
  • コードの貼り付け方がわかりません
解説
  • 解答解説はどのように勉強するべきですか?
  • 問題の解答解説はどうやって見ることができますか?
  • お気に入りに追加した問題はどこで閲覧することができますか?
  • Recursion
  • 公式ブログ
  • © 2022 Recursion, Inc All Rights Reserved.

よく検索されるワード:コミュニティ, 解答, プロジェクト