이전 문제와 같은 레벨 2지만 이전 문제에 비해 매우 쉬웠다.
yellow의 약수를 구하고 yellow칸의 가로 세로를 먼저 설정한다.
brown은 테두리 1칸으로 yellow칸을 둘러싸고 있기 때문에
가로와 세로에 각각 +2를 해서 둘을 곱한 값이
brown칸과 yellow칸을 합친 큰 직사각형이 되는 지 확인한다.
🎉완성코드
vector<int> solution(int brown, int yellow) {
for (int i = 1; i * i <= yellow; i++)
{
if (yellow % i == 0)
{
int w = yellow/i + 2;
int h = i + 2;
if (w * h == brown + yellow)
return { w,h };
}
}
}
알고리즘을 수학공식으로 세워서 해결했다.
vector<int> solution(int brown, int yellow) {
int x, y; //2차방정식의 해로 품.
x= 0.5*((2+brown/2)+sqrt((2+brown/2)*(2+brown/2)-4*brown-4*yellow));
y= 0.5*brown-x+2;
return {x,y};
}