[コケ]プログラマーはじゅうたんを完全に探求する


質問する
Leoは家に帰ってから、さっき見たじゅうたんの黄色と茶色の格子数を覚えたが、じゅうたん全体の大きさは覚えていない.
Leoがこのカーペットに茶色の格子の数茶色、黄色の格子の数黄色をパラメータとして与えた場合、カーペットの横方向と縦方向の寸法を順番に並べて返します.
せいげんじょうけん
茶色の格子の水brownは8以上5000以下の自然水です.
黄色のメッシュの数黄色は、1つ以上の200000以下の自然数です.
カーペットの横方向の長さは、縦方向の長さ以上です.
に答える
最近は符号化とともにモジュール化に努めている.コードがきれいになり、読みやすさも良くなったような気がします.
function solution(brown, yellow) {

    
    const max = brown/2 + 2 // 이부분을 정의하는데 많은 고민을했다. 아래 그림으로 설명을 해놓았다.
     
    const space = (min) => {
      const y = min //x >= y 라는 조건이 있기때문에 최소 길이를 y에 사용하였다.
      const x = max-y
      return {x,y, answer:(x-2)*(y-2) } // 바깥쪽이 브라운격자로 둘러 쌓여있기때문에 옐로우 격자가 들어갈 공간은 (x-2)*(y-2) 이다.
    }
    
    for (let i = 3; i <= max-3; i++){ // 각 변은 최소 3개의 블럭이 있어야 옐로우 블럭이 
      const result = space(i)
      if(result.answer === yellow) {
          return [result.x, result.y]
      }
    }
}
max = brown/2 + 2
下図を見ると説明しやすい.
この図はbrownが10である.どんな形をしてもx+yは7(brown/2+2)になります.
そこで,yが最大値3から始まる繰返し文を,残りのmax値からyを減算した値をxに割り当てることで,内部幅を求める繰返し文を記述した.