どうも未来電子でインターンをしているものです。
今回はhackerrankでどのようにすれば成長できるのかを自分なりに考えてみました。
私はプログラミング初心者であるため間違っていることがあるかもしれませんが、お手柔らかにお願いします。
#目次
・まずは自分で考える
・長くても20〜30分以上は考えない
・自分でできても一応Discussionsを見る
#まずは自分で考える
始めたては何もわからないためすぐに答えを見てもいいかもしれません。
しかしある程度わかるようになれば自分で考えることが重要です。
自分なりにコードを書いていくことで、自分の知識をアウトプットし、
同時に、わからない部分を調べることでインプットもできます。
私も問題を説いていく中でソートの使い方、辞書のキーの取得といった基本的なことを身に着けていっています。
#長くても20〜30分以上考えない
私は自力でときたいという性格であるため時間を大量にかけてしまうことがあります。
しかしこれは非効率的です。
それほど時間がかかる時点でほとんどわかっていないのですからその場合
先に答えを見てインプットする方が優先順位が先です。
#自分でできても一応Discussionsを見る
これは私もあまり実践できていないことです。
自分で書いたコードが通ったからと言ってよりきれいな解答を求めず、それで満足してしまうことがあります。
例えばある問題で私の解答は次のようになりました。
(https://www.hackerrank.com/challenges/2d-array/problem)
def hourglassSum(arr):
b = []
c = 0
for i in range(0, 4):
for a in range(0,4):
dex1 = arr[i]
c += dex1[a] + dex1[a+1] + dex1[a+2]
dex2 = arr[i+1]
c += dex2[a+1]
dex3 = arr[i+2]
c += dex3[a] + dex3[a+1] + dex3[a+2]
b.append(c)
c = 0
return max(b)
Discussionsを見てみると
>```
def hourglassSum(arr):
total = []
for i in range(4):
for j in range(4):
total.append(sum(arr[i][j:j+3]) + arr[i+1][j+1] + sum(arr[i+2][j:j+3]))
return max(total)
という別解がありました。
処理している内容はほとんど同じなのですが、
簡潔に表現しているためどんな処理をしているかが私のよりもわかりやすいです。
このとき私はリストの中のリストを表現する方法がわからなかったため自己流でしていました。
しかしこの解答を見ることによってよりきれいな表現の仕方を学ぶことができました。
このように、他の方の、より洗練された解答を見てそれを真似ることが重要です。
#まとめ
私も以上のことをきちんと実践できていないため、
気をつけていきたいですzzz