Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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