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
반응형
'JAVA > Programmers' 카테고리의 다른 글
JAVA 프로그래머스 [최댓값 만들기 (1)] 자바 Lv.0 (0) | 2023.06.01 |
---|---|
JAVA 프로그래머스 [주사위의 개수] 자바 Lv.0 (0) | 2023.06.01 |
JAVA 프로그래머스 [합성수 찾기] 자바 Lv.0 (0) | 2023.06.01 |
JAVA 프로그래머스 [공 던지기] 자바 Lv.0 (0) | 2023.05.31 |
JAVA 프로그래머스 [배열 회전시키기] 자바 (0) | 2023.05.31 |
댓글