문제설명
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하난 가장 큰 정수 i를 return하도록 solution 함수를 완성해주세요
1i <= n
<제안사항>
1) 0 < n <= 3,628,800
내가 직접 짜본 코드
class Solution {
public int solution(int n) {
int answer = 0;
int fac=1;
for(int i=1; i<=n; i++){
fac*=i;
if(fac>=n){
answer=i;
if (fac>n) answer=i-1;
break;
}
}
return answer;
}
}
코드 해석
1) i부터 n까지 반복문을 돌리면서 fac에 i를 누적 시키며 곱해줍니다'
2) 만약 fac이 n보타 크거나 같은면
3) answer에 i를 넣어주는데
4) fac이 n보다 크게되면 i-1을 넣어주고 반복문을 빠져 나옵니다
다른 사람의 코드
class Solution {
public int solution(int n) {
int fac = 1;
int i = 0;
while(true){
if(fac <= n){
fac *= i + 1;
i++;
}else break;
}
return i-1;
}
}
이렇게 중첩 if를 사용하지 않고 간단하게 풀 수도 있군요!
'CodingTest' 카테고리의 다른 글
프로그래머스 - 나이 출력 (JAVA) (0) | 2023.01.31 |
---|---|
프로그래머스 - 개미군단 (JAVA) (0) | 2023.01.27 |
프로그래머스 - A로 B 만들기 (0) | 2023.01.25 |
프로그래머스 - 인덱스 바꾸기 (JAVA) (0) | 2023.01.19 |
프로그래머스 - 배열의 유사도 (JAVA) (0) | 2023.01.13 |