Programming Problems/Recursive

종이 최소 갯수의 정사각형 조각으로 자르기

fw93 2018. 4. 22. 16:22

13 * 29  : 13*13 2개, 3*3 4개 1* 1 3개 = ans : 9



풀이 : 아무래도 짧은 변을 한 변으로 하는 정사각형을 긴 쪽으로 할 수 있는 만큼 만든 후에, 남은 길이를 재귀적으로 호출하면 된다.

base case는 한쪽 길이가 1이면 조각의 수는 긴 쪽 길이이다.


int findsquares(int M, int N){

// base case

if(N==1) return M;

// general case

int count = M/N;

return count + findsquares(N,M%N);

}


시간 복잡도 .. O(log 루트N) 쯤 되지 않을까? 작은 것 보다 작게 만드니까 작은 것으로 만든다고 가정하면 대략 logN이고..