20分後には、何があってもコーディングを始めるべきというようなルールはありますか?
いいえ。ただし、業務に着手する前に問題の分析に20分を費やしている場合は、おそらくすでに問題に直面しているでしょう。あなたが引用したような質問をする雇用主は、あなたが問題にどのようにアプローチするかに主に興味を持っていますが、彼らがコーディングの問題としてそれを尋ねるなら、彼らもいくつかのコードを見たいでしょう。あなたの思考プロセスを通して彼らに話してください...
さて、ここでの明らかなアプローチは総当たりです。3つの頂点が与えられた直角三角形を認識する方法があれば、2つのポイントと原点が直角三角形を探しているすべての組み合わせを実行できます。それは難しくないはずです-ピタゴラスの定理を使用して直角三角形を識別する関数を書くことができます。それを簡単にするために、距離式を使用して2点間の距離を決定する関数も作成します...
これらの関数の作成には約3分かかります。質問のほんの数分で、基本的なジオメトリを覚えており、コードの作成方法を本当に知っていることを既に示しました。また、次のことも説明します。
したがって、明らかにisRightTriangle(p1, p2, p3)
4つのfor
ループの中央に関数を配置し、2つの変数ポイントのそれぞれについて可能なすべての選択肢を反復処理できます。見てみましょう...問題は、50x50グリッド上の原点を含む直角三角形の数を要求するため、ブルートフォースメソッドを使用して、各ポイントの各座標の50の可能性をチェックします。それは50 ^ 4チェックです...私たちはもっとうまくやれると確信していますが、コードは明らかなので、それを書き留めてください...
そのため、今度は、ネストされたfor
ループを使用する関数と、isRightTriangle()
先ほど作成した関数を作成します。問題は解決しましたが、面接官にあなたの行く先を見せてくれました。彼らの目標がコードを書くことができることを確認することだけだった場合、彼らはあなたにやめるように言うかもしれません。おそらく、彼らは彼らが何をしているのかを知っている誰かと話をすることをうれしく思います。それで…
私が書いているときに、対称性を利用できると思いました。45°の線の周りに与えられた直角三角形を反射することができるので、その線の片側でのみポイントの1つをチェックすることを選択した場合、2回見つかった直角三角形を数えることができます...三角形に対して1回と1回その反映のため。これにより、チェックの数が半分になります。また、今それを見て、2つの点の間の距離を見つけるために平方根を取っていますが、それをもう一度平方しisRightTriangle()
ます...
等々。繰り返しになりますが、彼らは通常、完璧な解決策を見たくはありません。あなたの思考プロセスは、上記のようなものである必要はありません-大声で考える自信があるだけで、非常に重要です。間違えたとしても汗をかかないでください-「うーん、私はここでレールから外れたと思います-私は一歩戻ってみましょう...」