본문 바로가기
JAVA/Programmers

JAVA 프로그래머스 [팩토리얼] 자바 Lv.0

by tripleup 2023. 6. 1.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 팩토리얼

https://school.programmers.co.kr/learn/courses/30/lessons/120848


해결 과정

 

n이 주어질 때 n보다 팩토리얼의 값이 작은 최대의 수를 구해야 한다.

재귀함수를 사용하여 구할 수 있지만 나는 다른 방법으로 풀어보았다.

 

우선 팩토리얼의 값을 담을 num과, 곱해지는 수(1씩 증가)를 담을 k를 1로 선언해준다.

 

그러고 while 반복문을 이용하여 num에는 k값을 누적하여 곱해주고, 만약 num >n 이 된다면 그 때의 k값을 answer에 넣고 break를 해준다. 반복문의 마지막 부분에서는 k++을 통해 1씩 k값을 증가시켜주면 된다.

 

하지만  이 때의 k값은 이미 num> n을 만족하는 상황이므로 그 k보다 1이 작게 넣어줘야 한다.

그러므로 answer에 k값이 들어가 있으니 최종적으로는 answer-1을 return 해주면 된다.

 

소스 코드

 

class Solution {
    public int solution(int n) {
        int answer = 0;
        int num = 1;
        int k=1;
        
        while(true) {
            num *= k;
            if (num > n) {
                answer = k;
                break;
            }
            k++;
        }
        return answer-1;
    }
}

 

(또 다른 풀이)

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= 10; i++) {
            if (n >= factorial(i)) {
                answer = i;
            } else {
                break;
            }
        }
        return answer;
    }
    
    public static int factorial(int number) {
        if (number > 1) {
            return number * factorial(number - 1);
        }    
        return number;
    }
}

 

위 방법은 재귀함수를 사용하는 방법이다.

 

우선 팩토리얼의 값을 구하는 factorial함수를 만들어 사용한다.

 

이 함수에서 return 된 값이 n보다 작거나 같을 경우에 해당 i 값을 answer로 구할 수 있다.

 


 

728x90
반응형

댓글