$30 off During Our Annual Pro Sale. View Details »

PHPでleetCodeのeasyレベル100問ノック

Tomoya-Suzuki
February 11, 2020

 PHPでleetCodeのeasyレベル100問ノック

PHPerKaigi2020のLT5分枠でお話させていただいたものです。

Tomoya-Suzuki

February 11, 2020
Tweet

More Decks by Tomoya-Suzuki

Other Decks in Technology

Transcript

  1. PHPでleetCodeのeasyレ
    ベル100問ノック
    @yamotuki
    鈴木智也

    View Slide

  2. 自己紹介
    ● 4年ちょっとインフラ
    転職⬇
    ● 「M&Aクラウド」という八丁堀のベンチャーでエンジニア
    ● 現職: バックエンドエンジニア 1年半。PHP書くぞ!
    ● 転職直後は・・・・

    View Slide

  3. なんも分からん!
    ● PHPわからん! ロジック書くのめっちゃ苦労する!
    ● そんな時期・・・
    ○ GAFAではコーディング面接するらしい
    ○ 世界で戦うにはアルゴリズムは絶対に必要な素養っぽい
    ● という噂

    View Slide

  4. じゃあ勉強するぞ!
    ● leetCode というコーディング面接の過去問を集めたサイト
    ○ https://leetcode.com/

    View Slide

  5. View Slide

  6. PHPでできるぞ
    ● テンション上がってきた!
    ● まずは100問やるぞ!

    View Slide

  7. やってみた
    8割くらいPHPで実装

    View Slide

  8. 何が役に立ったか?(今日のアジェンダ)
    4点話します
    1. 読み書きが楽に
    2. 他言語も触れる。Golang, JS, Python など
    3. テストファーストが身に付く
    4. なんとなくの速度感覚がつく

    View Slide

  9. 1. 読み書きが楽に
    ● 当初の目的達成
    ● ロジックを書くのがちょっと楽に
    ● 可読性低いコードも少し楽に読めるように

    View Slide

  10. 2. 他の言語も触れる
    ● PHPと比較して他の言語も実装
    ● Golang, JavaScript, Python とかちょっとだけ触った

    View Slide

  11. 3. テストファーストが多少身に付く
    ● 思わぬ恩恵
    ● LeetCodeのコードの試し実行が遅い
    ● PHPStormでテストファースト
    ● テスト通ってロジックに納得したら提出

    View Slide

  12. 4. なんとなくの実行速度感覚がつく
    ● なんとなくレベル
    ● 経験的に、重そうな関数がわかってくる
    ● 同じ処理するならこっちの方法が軽いぞ、みたいなパターンも

    View Slide

  13. 【小ネタ】 in_array() 遅い話 
    [‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘banana’, ‘apple’]
    から ‘apple’ があるか判定
    in_array() 使うのが楽そう?

    View Slide

  14. in_array() はやや遅い
    ● 言語の内部ではforで1要素ずつみて一致したらtrueなので重い
    ● 以下は速度測定コード
    n=10000でループ10000回 0.2秒

    View Slide

  15. array_flip() しておいて isset() する方が早い
    ● 同じ配列で0.003秒で終わる。66倍早い!(当然毎回flipしたら遅いけど)

    View Slide

  16. なんでisset()でチェック早い?
    ● array_flip() すると配列は以下のようになる
    ● [‘banana’ => 9999, ‘apple’=> 10000]
    ● 検索対象がハッシュマップのキーになるので、O(1)で判定可能

    View Slide

  17. 終わりに
    ● パズルゲームだと思うと楽しい
    ● 突然難しいのを始めると辛いので、簡単なのから着実に
    まとめ(再掲)
    1. 読み書きが楽に
    2. 他言語も触れる。Golang, JS, Python など
    3. テストファーストが身に付く
    4. なんとなくの速度感覚がつく

    View Slide