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

또치·2023년 1월 17일
0

프로그래머스 JAVA

목록 보기
1/20
post-thumbnail

프로그래머스 코딩테스트 연습 velog 작성 시작!

1단계 들어가면 글 작성하면서 하려고 했는데 벌써 몇시간동안 잡고 푸는 문제가 생겨버려서 지금부터 작성하기로!

🎯 문제

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다.
예를들어 5! = 5 4 3 2 1 = 120 입니다.
정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

<제한사항>
0 < n ≤ 3,628,800	

답안

class Solution {
    public int solution(int n) {
        // n 이하이면서 10이하에 해당하는 자연수들이 담길 list 생성
        List<Integer> list=new ArrayList<>();
        
        for(int i=1; i<=10; i++) {
			if(i<=n) {list.add(i);}
		}
        int num=list.size();
        
        // 그 수의 팩토리얼이 n 이하인 수를 구하면되니까
        // list에 담긴 숫자중에 제일 큰 수부터 값 계산해주고 n 이하면 바로
        // break
        // list에 담긴 각각의 수의 팩토리얼을 구해주면서 그 수가
        // n 보다 크면 1씩 깍아주기
		while(num>0) {
			int temp=1;
			for(int i=num; i>=1; i--) {
				temp*=i;
			}
			if(temp<=n) {break;}
			num--;
			
		}
        return num;
    }
}

🧵 풀이

일단 팩토리얼이라는 말 자체부터 어려웠다.
그리고 처음에는 n이하의 모든 수를 list에 담아야된다고 생각해서 그럼 숫자가 3,628,800 이렇게 커지면 너무 낭비아닌가 고민했는데
생각해보니까 예시에서 n의 최대값인 3,628,800의 가장 큰 팩토리얼은 10이라고 말해줬었다
그냥 10이하의 수 뽑아내서 담으면 되는거였어...!
암튼 그거 해결하고는 팩토리얼 구한게 n이하면서 제일로 커야하니까 while문 써서 큰값부터 1씩 빼가면서 구했다!

0개의 댓글