[プログラマー学習]カーペット


質問する


プログラマー-カーペット

に答える

import math


def solution(brown, red):
    area_candidate = []

    total = brown + red
    for i in range(1, int(math.sqrt(total)) + 1):
        if total % i == 0:
            area_candidate.append((total // i, i))

    for x, y in area_candidate:
        if (x - 2) * (y - 2) == red:
            return [x, y]

解説

  • 褐色と赤色の格子数を合わせた総平方根を、カーペットの高さと幅を作ることができる候補軍リストを作成した.
  • フィードバック:math.sqrt()は「**0.5」
  • としても使用できます.
  • (横-2)*(縦-2)は、赤いメッシュの個数に等しい.
  • 候補軍のリストを迂回して、赤いグリッドが(横-2)*(縦-2)と同じかどうかを確認します.
  • であれば、縦横のペアを返します.