i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 4 3 2 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
0 < n ≤ 3,628,800 (10! = 3,628,800)
메소드 함수 이용해서 미리 규칙으로 식을 만든 다음 (10!에 대한 계산값 미리)
메인 메소드에서 10부터 1까지 하나씩 감소하면 가장 큰 정수 구할수 있지 않을까.
class Solution {
public static int factorial(int num){ //팩토리얼 메소드
if(num==1) return 1; //재귀함수 사용, num이 1인 경우 1을 return
return num * factorial(num - 1);
//함수를 호출할때마다 num에서 1씩빼서 계산, num이 1이 될때까지 반복한다.
}
public int solution(int n) {
int answer = 0;
for (int i = 10 ; i > 0 ; i --){
//가장 큰 정수를 구해야하니까 10부터 시작 1씩 감소
if(n >= factorial(i)){
answer = i;
break; //빠져나오지 않고 계속 실행하면 결국은 값은 1이된다.
//제일 먼저 도달한 값에서 빠져나와야함!
}
}
return answer;
}
}