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


チェックカーペットの場合、茶色の枠部分と黄色の内側部分があると仮定し、茶色部分と黄色部分の個数をそれぞれ与えると、カーペットの縦横寸法を配列に戻す必要がある.
ちょっと考えると簡単な問題です.
ブラウンはボーダーなので、半分に分けると横+縦-1の値が得られます.
幅4 x 6のカーペットであれば、茶色には(4-2)x 2+6 x 2の個数があります.
言い換えればこうだ
(ブラウン/2-i)x(i+2)=幅
幅=褐色+黄色
茶色+黄色=(茶色/2-i)x(i+2)
茶色と黄色の値は既に知られているので,上記の式の基準に従って適切なiを見つけるだけでよい.
文字で説明するのは難しいので、説明するよりコードを直接見たほうがいいです.
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int half = brown/2;
        int size = yellow+brown;
        for(int i=1; i< half; i++) {
            if(size==((i+2)*(half-i))) {
                answer[0] = (half-i);
                answer[1] = (i+2);
                break;
            }
        }
        
        return answer;
    }
}