[Python/Programmers]カーペット


質問する


1.難易度:プログラマーレベル2


2.問題の概要


Leoはじゅうたんを買いに行きました.格子じゅうたんの列が見えました.真ん中は黄色で、一列は茶色で、下図のように見えます.

Leoは家に帰ってから、さっき見たじゅうたんの黄色と茶色の格子数を覚えたが、じゅうたん全体の大きさは覚えていない.
Leoがこのカーペットに茶色の格子の数茶色、黄色の格子の数黄色をパラメータとして与えた場合、カーペットの横方向と縦方向の寸法を順番に並べて返します.
せいげんじょうけん
  • 茶色の格子の水茶色は8以上5000以下の自然水です.
  • 黄色のメッシュの数は、1以上200000以下の自然数です.
  • カーペットの横方向の長さは、縦方向の長さ以上である.
  • 3.問題の核心

  • すべての場合にチェック->完全ナビゲーション
    ex)4ビットのパスワードからなるロックを解除しようとすると、0000から9999までのすべての試行(無条件解答)
  • .

    マイコード

    import math
    def solution(brown, yellow):
        for yHeight in range(1, yellow):
            yWidth = yellow / yHeight
            
            if yWidth != int(yWidth):
                continue
                
            elif (yWidth * yHeight!= yellow) or (yWidth < yHeight):
                continue
                
            else:
                bWidth = yWidth + 2
                bHeight = yHeight + 2
                if bWidth * bHeight - yellow == brown:
                    return [bWidth, bHeight]
        if yellow ==1:
            return [3,3]

    理想的なコード

    def solution(brown, yellow):
        total = brown + yellow
        for i in range(total, 2, -1): ## i는 가로
        	if total % i == 0:
            	j = total // i ## j는 세로
                
                if yellow == (i-2)*(j-2):
                	return [i, j]