見出し画像

【ARC004 A問題】2点間の最大距離 Pythonによる解法

こんにちは、しゅんだいです(^▽^)/

テスト期間が終わり、一昨日からプログラミングの勉強を再開しています。
何事にも目標は必要ということで、この夏休みが終わるまでにAtCorderで茶色まで到達することにしました!

そこでまずは競技プログラミングの基本でもある全探索について学習したので、内容を記事にまとめておこうと思います。

ARC004 A問題 二点間距離の最大値

今回扱った問題は、全探索を用いる基礎問題として有名なものを選んでみました。では、実際に解いていきます。

問題の内容は、N個の(x,y)を表す数字の組が羅列されていて、2点間距離が最大となるものを出力せよ、というものです。

やらなければいけないことは明確で、N個の数字の組みから2組を選んで絶対値で2点間の距離を計算し、その中から最大のものを選ぶというものです。

まず2点間の距離の計算の仕方ですが、数学の知識になるので以下のサイトをご覧ください。

この問題のポイントはN個の数字の組から2個の数字を選んでくることです。このような組み合わせを考える場合に便利なのがitertoolsというモジュールです。

今回使う関数はpermutations()という関数で重複を除いた2組を選ぶことができます。簡単な使い方は以下の通りです。第一引数で選ぶ元を指定して、第二引数で何個選ぶかを決めます。

from itertools import permutations

a = [1,2,3,4,5]

for i in permutations(a,2):
    print(i)
#出力結果
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(2, 1)
(2, 3)
(2, 4)
(2, 5)
(3, 1)
(3, 2)
(3, 4)
(3, 5)
(4, 1)
(4, 2)
(4, 3)
(4, 5)
(5, 1)
(5, 2)
(5, 3)
(5, 4)

今回は、この関数を用いて2つの数字の組を選んで公式に従って2点間の距離を計算します。その結果をリストに入れて、最後に最大値として取り出します。コードは以下のようになります。

from itertools import permutations
import math

N = int(input())
point = [list(map(int,input().split())) for i in range(N)]
length = []

for set in permutations(point,2):
   calc = math.sqrt((set[0][0]-set[1][0])**2 + (set[0][1]-set[1][1])**2)
   length.append(calc)
   
print(max(length))

まだ自信をもって見せるほどの力がないので恥ずかしい限りですが、このようなコードでACとなりました。

競プロを始めたばかりの頃は標準入力で躓きますが、そこは練習問題をこなしていくうちに頭に入るかなと思います。

もし改善点などがあればコメントで教えていただければ幸いです!

この記事が気に入ったらサポートをしてみませんか?