문제링크
문제 접근
- Leo가 카펫 보고 온거니까 주어진 brown과 yellow로 사각형을 만들수 없는 경우는 없는듯
- 가로 길이가 세로 길이보다 크거나 같으므로 세로 길이로 작은 값부터 완탐
- brown이 yellow를 감싸야하므로 최소 sero값은 3
- sero를 3부터 1씩 증가시키며 sum(brown + yello)을 나누어 떨어트릴 때 가능한지 체크
- 입출력 예시를 종이에 그려보니 (가로 - 2) * (세로 - 2) = yellow 면 카펫의 크기
- 최악의 경우 sum = 5,000 + 2,000,000 = 2,005,000
- 이때 sero값이 절반이라고 하여도 백만번 정도 (시간 문제 없음)
코드
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int sum = brown + yellow;
int garo = 0;
int sero = 3;
while(true){
if(sum % sero == 0){
garo = sum / sero;
if((garo-2) * (sero-2) == yellow){
answer[0] = garo;
answer[1] = sero;
break;
}
}
sero++;
}
return answer;
}
}
결과

정리
- 완전탐색 말고 다른 방법이 있을까 고민해봤지만 모르겠다
- (brown과 yellow) 그리고 (가로와 세로)가 헷갈릴 수도 있겠다 라는 생각