[アルゴリズム]プログラマー-カーペット


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

説明する

def solution(brown, yellow):
  total = brown + yellow
  for row in range(3, int(total**0.5)+1):
      if total % row == 0:
          col = total // row
          if (row-2)*(col-2) == yellow:
              return [col, row]

print(solution(10, 2), [4,3])
print(solution(8, 1), [3,3])
print(solution(24, 24), [8,6])
黄色と茶色を加えると総数になります.形状全体をrow*columnと呼ぶ場合、黄色の個数は(row-2)*(column-2)個である.brownは最大5,000,yellowは最大2,000,000,000,000,000の形状を持つ可能性がありますが、行は3から(yellowの最小値は1,rowの最小値は3)Mathです.sqrt(total)さえできれば、いずれにしても、後は繰り返します.そうなると、可能な場合の数は10万に減ります.