https://school.programmers.co.kr/learn/courses/30/lessons/42842
약간의 수학적 사고가 필요해보인다.
먼저 찾을 수 있는 규칙은
따라서
brown + yellow = 2*(row+column-2) + (row-2)*(column-2) = row * column
(단, brown>=8, yellow>=1, row>=3, column>=3, row>=column)
문제의 카테고리는 완전탐색이다.
완전 탐색이란?
가능한 경우의 수를 모두 나열하면서 원하는 답을 찾는 방법이다.
위 식을 만족하는 row, column을 찾을 때 까지 반목문을 통해 구하면 될 것 같다.
로직
1. total을 구한다(brown + yellow)
2. 먼저 3으로 r을 임의 지정하고 total%r=0이면 c=total/r를 구한다(r로 나누어 떨어지는 몫 c를 구한다).
3. column>=3, row>=column 이 성립하는지 검사한다.
4. brown = 2(row+column-2) 이 성립하는지 검사한다
~~5. yellow = (row-2)(column-2) 이 성립하는지 검사한다.~~ 4번만 검사해도 동일함
6. 모두 성립할 때까지 2~5 과정을 반복한다(2에서 r의 크기를 1씩 증가하며 반복).
코드로 작성하면...
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int total,r,c;
total=brown+yellow;
for(r=3;;r++){
if(total%r==0){
c=total/r;
if(c>=3 && r>=c){
if(brown==2*(r+c-2)) break;
else continue;
}
else continue;
}
else continue;
}
answer[0]=r;
answer[1]=c;
return answer;
}
}