じゅうたん


🔗 質問リンク


https://programmers.co.kr/learn/courses/30/lessons/42842

問題の説明



Leoはじゅうたんを買いに行きました.格子じゅうたんの列が見えました.真ん中は黄色で、一列は茶色で、下図のように見えます.
Leoは家に帰ってから、さっき見たじゅうたんの黄色と茶色の格子数を覚えたが、じゅうたん全体の大きさは覚えていない.
Leoがこのカーペットに茶色の格子の数茶色、黄色の格子の数黄色をパラメータとして与えた場合、カーペットの横方向と縦方向の寸法を順番に並べて返します.

⚠▼制限


  • 茶色の格子の水brownは8以上5000以下の自然水です.

  • 黄色のメッシュの数黄色は、1つ以上の200000以下の自然数です.

  • カーペットの横方向の長さは、縦方向の長さ以上です.
  • 💡 プール(使用言語:JavaとPython)


    Java

    class Solution {
        public int[] solution(int brown, int yellow) {
            int[] answer = new int[2];
            int sum = brown + yellow;
            for (int i = 3; i <= sum/3; i++) {
                int width = sum / i, height = sum / width;
                if (((width - 2) * (height - 2)) == yellow && width >= height) {
                    answer[0] = width;
                    answer[1] = height;
                    return answer;
                }
            }
            return answer;
        }
    }

    Python

    def solution(brown, yellow):
        
        # 정답 가로세로가 [x,y] 일때, yellow의 값은 가로 세로가 2씩 빠진 값인 (x-2)(y-2)임
        # x * y = brown + yellow 와 y를 지우고 x에 대해 연립방정식을 정리해 근의 공식으로 만들어 코드로 그대로 씀 
        x = ( (4 + brown) + ( (4 + brown) ** 2 - 16 * (brown + yellow) ) ** 0.5) / 4
        y = (brown + yellow) / x
        
        # x y 값이 실수 형태로 소수점 달고 나오므로 int형 변환
        answer = [int(max(x,y)), int(min(x,y))]
        return answer