카펫의 갈색 격자 수 brown, 노란색 격자 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return하는 solution 함수를 작성하는 문제이다.
중심에 있을 노란색 격자가 올 수 있는 (가로, 세로) 조합들, 즉 노란색 격자 수의 약수를 구한 다음, 이를 감쌀 갈색 격자 수를 구했다. 갈색 격자로 테두리를 1줄씩 추가하면서, 추가한 갈색 격자 수가 매개변수로 주어진 brown과 같은 경우의 가로 세로 조합을 찾는 코드를 아래에 작성하였다.
import java.util.LinkedList;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
// yellow의 약수
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 1; i * i <= yellow; i++) {
if (yellow % i == 0) {
queue.add(i);
}
}
while(!queue.isEmpty()) {
int h = queue.poll();
int w = yellow / h;
int bc = 0;
while (bc < brown) {
bc += 2 * (h + w) + 4;
h += 2;
w += 2;
}
if (bc == brown) {
answer[0] = w;
answer[1] = h;
break;
}
}
return answer;
}
}