STERFIELD

コーディングの筋トレ

コーディングの筋トレ

はじめに

新しい技術として機械学習を学んでいます。
それとは別に最適かつ挑戦的なコーディング力を改めてトレーニング中です。

atCoderLeetCodeなど
コーディングテストのサイトを利用することで
コンテスト的な感覚で自分のシンプルなコーディング力を試せます。
LeetCodeの方がその場でRunTestしたり課題もジャンル豊富でオススメ。

どのようなアプローチを取っているか
試行錯誤の中での思ったことを徒然と記します。

例題

シンプルによくありそうな例題に挑戦。
レベルとしては初級あるいは初級中級の間でしょうか。

任意の長さである文字列を入力し、重複している文字の種類を出力せよ

例えば “abccddd” と入力したら “2” と出力します。
“abcdef”であれば “0” を出力します。

ロジックのアプローチ

色々方法はあるかと思います。
以下の手法はベストではないかもしれないですが
ロジックとコードの行き来がしやすいと思って挙げます。

  1. 入力する(これをNとする)
  2. Nをnという一文字ずつの配列に置き換える
  3. n配列を要素に重複の無い配列mにする
  4. 各要素がnに対して2個以上であればカウンタを増やす(初期値0)
  5. というアプローチです。
    まあ、それほど重くならないだろうと踏んでO(ビッグオー)の計算はしてません。

言語の選択

コーディングテストに投稿する際に最初に悩んだもの。
どの言語にするか。

最終的にはPython3に落ち着きました。
普段はPHPをやっているけれども、なんだかんだすっきりしたコードになるし速い。
Rubyでもまあまあいい気がします。PHPは好みでないことが判明。

1. PHP

最初の

おまじないがそもそも邪魔。。。
変数の前の “$” も邪魔。

2. Ruby

PHP もですが、標準入力の最後の改行を含んでしまっている。
uniqeachなどフィルタ的な感覚で処理を重ねていけるのは良いところ。
おそらくeachもワンラインで書ける。

3. Python

コードがシンプルに、かつロジックも必要最小限な気がする。
setなどは知らなければ最初調べる程度で
その他は直感的にロジックに従って書いてる感覚。

その他のアプローチ

前提の条件になるとは思いますが
コーディングはロジックが決まって投影するだけ。
なので数学的にビッグ・オーを最小にしながら解決するために
日頃から高校数学程度の脳トレーニングは有効な気がします。

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい