def solution(brown, yellow):
answer = []
all = brown + yellow
for i in range(brown):
for j in range(brown):
if i * j == all and ((i * 2) + (j * 2) - 4) == brown:
if i >= j:
answer.append(i)
answer.append(j)
if answer:
break
return answer
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
int all = brown + yellow;
for (int i = 0; i < brown; i++){
for (int j = 0; j < brown; j++){
if (i * j == all && ((i * 2) + (j * 2) - 4) == brown){
if (i >= j){
answer.push_back(i);
answer.push_back(j);
}
}
}
if (answer.size()) break;
}
return answer;
}
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int brown, int yellow) {
int len = brown / 2 + 2;
int w = len - 3;
int h = 3;
while(w >= h){
if(w * h == (brown + yellow)) break;
w--;
h++;
}
return vector<int>{w, h};
}
w * h = brown + yellow
, (w-2) * (h-2) = yellow
두 식을 yellow를 대입해서 연립방정식으로 풀어보면
w = brown/2 + 2 - h, h = n(단, n은 자연수)
h값이 변함에 따라서 w값은 자연스럽게 바뀐다.
h가 1 늘어난다는 것은 w가 1 줄어드는 것과 같다.
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
따라서, width, height는 최소 3, 3
function solution(brown, yellow) {
let len = brown / 2 + 2;
let w = len - 3;
let h = 3;
while(w >= h){
if(w * h == (brown + yellow)) break;
w--;
h++;
}
return [w, h];
}