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씩 빼가면서 구했다!