문제 링크
카펫
풀이
int[] answer = new int[2];
int sum = brown + yellow;
for (int i = 1; i <= yellow; i++) {
if (yellow % i == 0 && (yellow / i + 2) * (i + 2) == sum) {
answer[0] = Math.max(yellow / i + 2, i + 2);
answer[1] = Math.min(yellow / i + 2, i + 2);
return answer;
}
}
return answer;
해설
- 규칙성을 찾다보면 보이는게 하나 있다.
- brown + yellow는 최종 사각형의 가로 * 세로 값과 동일
- yellow로만 이루어진 사각형의 가로와 세로는, 최종 사각형의 가로와 세로에서 각각 -2를 해주면 된다.
- yellow로만 이루어진 사각형의 넒이는 yellow의 값과 동일할 것이다.
- 그렇기에 yellow값에서 약수를 구함과 동시에, 해당 약수에 각각 +2를 해줘서 곱했을 때, yellow + brown값과 같다면 그게 바로 정답