1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

二点間の距離(マンハッタン距離) Math.abs 

Posted at

今回は、二点間の距離を計算する問題を解いた!

ちなみに、マンハッタン距離の由来はアメリカ・ニューヨークの「マンハッタン」の街の構造から来ているらしい。

問題概要

与えられた N 個の点 (x, y) と、基準点 (2, 3) のマンハッタン距離をそれぞれ出力せよ。

マンハッタン距離:
|x₁ – x₂| + |y₁ – y₂|


入力例:
3
2 3
1 2
5 6

出力例:

0
2
6

余談

マンハッタンの道路は、縦と横にまっすぐ通っていて、斜めに進めないので、目的地まで行くには曲がりながら進む必要がある。

そのような状況で使われる距離が「マンハッタン距離」。
✅ よく使われる場面

  • 迷路やグリッドマップでの距離計算
  • 競技プログラミング
  • ルート最適化やゲームAI
  • データサイエンス(クラスタリングなど)



❌NGコード例

const rl = require('readline').createInterface({input:process.stdin});
const lines = [];

rl.on('line',(input)=>{
    lines.push(input);
});


rl.on('close',()=>{
    const N = Number(lines[0]);
    const coordinate = lines.slice(1).map(line => line.split(' ').map(Number));
    
    coordinate.forEach(element => {
        const result = (element[0] - 2) + (element[1] - 3);
        console.log(result);
    })
});

提出コードのアウトプット

0
-2
6

❌問題 :マンハッタン距離の定義を無視している

上記のコードは絶対値 | | をとっていないため、負の値が出ることもあり、正しい距離ではない。


📌OKコード例 Math.abs()を使う:

const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];

rl.on('line', input => lines.push(input));

rl.on('close', () => {
    const N = Number(lines[0]);
    const baseX = 2, baseY = 3;

    for (let i = 1; i <= N; i++) {
        const [x, y] = lines[i].split(' ').map(Number);
        const distance = Math.abs(x - baseX) + Math.abs(y - baseY);
        console.log(distance);
    }
});

✅ 解説ポイント
  • Math.abs():絶対値をとる関数。マンハッタン距離に必須。

  • split(' ').map(Number):座標を [x, y] の数値配列に変換。

  • 変数名が抽象的すぎるのを修正。

    • element[0], element[1] では何の値かパッと見てわからない。
    • [x, y] に分割代入したほうが、読み手が内容を理解しやすい。 
  • ループで各点にアクセスし、距離を1行ずつ出力。



💡新しく学んだことまとめ

  • Math.abs()は数の絶対値を返してくれる関数。
  • 分割代入 [x, y] = ... でコードがスッキリ&理解しやすくなる。
  • マンハッタン距離はゲームや地図アプリでも使われる!




僕の失敗談(´;ω;`)と解決法🐈

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?