핵심
가로 길이 >= 세로길이
가로 세로 길이를 구하되 갈색과 노란색의 개수가 맞아야함
좀 이상하게 풀었는데
우선 가로 세로를 찾기위해 약수를 구한다. 약수가 가로 세로가 된다.
약수를 check 메서드에 넘긴다.
check 메서드는
가로가 위아래로 2개 있으므로 가로 길이 x 2를 해준 다음 전체 갈색개수에서 빼준다.
이를 2로 나누면 사각형에서 양 옆의 개수가 된다.
위 예시와 같이 4 / 2 = 2 세로 옆구리가 2다.
이 값이 매개변수로 넘어온 약수로 찾은 가로세로중 세로 길이 - 2 한 값보다 작거나 같으면
정상적으로 사각형이 성립된다.
만약 옆구리가 2 고 약수로 찾은 세로가 1이면 갈색이 1 남는다.. 이러면 아닌 것이다.
class Solution {
public int[] solution(int brown, int yellow) {
// 너비는 brown + yellow 와 같다.
// 가로 길이 >= 세로
int area = brown + yellow;
for (int i = 3; i < 5001; i++) {
// 이과정은 세로를 구하는 과정 (가로 x 세로 = 넓이)
if (area % i == 0 && (area / i) <= i ) {
// i :가로, area/i :세로
if (check(new int[] {i, area/i}, brown, yellow))
return new int[] {i, area/i};
}
}
return null;
}
public boolean check(int[] arr, int br, int ye) {
int temp = (br - (arr[0] * 2)) / 2;
if (temp <= arr[1] - 2)
return true;
return false;
}
}
(가로 - 2 ) x (세로 - 2)= 노란색 넓이
이걸 생각해내지 못했다...ㅠㅠ
약수를 찾아서 가로 세로를 구하고
(가로 -2) x (세로 -2) == 노란색 넓이 로 조건문을 걸어서 참이면 그것이 가로세로 정답이다.