じゅうたん
🔗 質問リンク
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
Reference
この問題について(じゅうたん), 我々は、より多くの情報をここで見つけました https://velog.io/@shiningcastle/카펫テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol