운이 좋았는지 풀이를 금방 떠올렸다.
바로 (brown+yellow)는 사각형의 넓이와 같으므로 즉, (가로x세로)와 같다는 것이다.
따라서 가로의 최댓값부터 가로의 최솟값까지 내려가면서, 그 사각형의 넓이에서 테두리를 제외한 값이 yellow의 크기와 같은지 검사하면 된다.
디테일은 코드 참고import java.util.*; class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; // 문제 // brown은 바깥(테두리 1줄) // yellow는 안쪽 // 더 긴 쪽, 짧은 쪽 순서로 return // 풀이 // 1. brown으로 사각형을 만들어보고 yellow가 들어가는지 // 2. 가로 x 세로 크기 = yellow + brown인 사각형 // 2번 채택 // 2번에서 최대가로값((brown갯수-2)/2)부터 최대세로값(세로최댓값=가로최솟값)까지 // --해가면서 가로의 최댓값 찾기, 그다음 세로값 구하기 // if(?) 면 가로의 최댓값, ? -> 배열을 만들고, 테두리1칸 빼고의 숫자가 yellow갯수와 같으면 -> 배열만들필요없이, 그냥 넓이에서 가로, 세로 빼보기 int dim = brown + yellow; //가로 최댓값 int maxW = (brown-2)/2; //세로 최댓값 : 정사각형일때 세로길이 int minW = (brown-4)/4+2; for(int i = maxW; i >= minW; i--){ //현재 가로값 int w = i; //현재 세로값 int h = (brown-2*w)/2 + 2; //현재 테두리 칸 갯수 int boundary = (w+h-2)*2; //현재 사각형 넓이 - 테두리칸 갯수 == yellow면 break; if(w*h - boundary == yellow){ answer[0] = w; answer[1] = h; break; } } return answer; } }