i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요
i! ≤ n
- 숫자 범위보다 큰 팩토리얼까지 모두 배열에 담는다
- 주어진 숫자를 배열에 담고 정렬했을 때 주어진 숫자가 어디에 위치하는지 찾으면 안될까?
- 문제의 숫자 범위는 10!까지
- 그런데 생각해보니 같은 값이면 어떻게 될까? 일단 해보자
const factorial = function (num) {
let result = 1
for (i = 2; i <= num; i++) {
result *= i
}
return result
}
let factorial_Arr = new Array(10)
for (j = 1; j <= 10; j++) {
factorial_Arr[j - 1] = (factorial(j))
}
function solution(n) {
var answer = 0
if (factorial_Arr.indexOf(n) === -1) {
factorial_Arr.push(n)
factorial_Arr.sort((a, b) => a - b)
answer = factorial_Arr.indexOf(n)
} else {
answer = factorial_Arr.indexOf(n) + 1
}
return answer;
- 같은 값일 때와 다른 값일 때의 인덱스를 활용한 반환값이 다르다 => 조건문을 줘서 다르게 하자
통과는 했는데 다른 사람들 풀이 보니까 내가 저렇게 팩토리얼부터 배열에 할당하는 것까지 할 필요 없이 처음부터 그냥 값이 들어있는 배열을 만들 걸 그랬다 그리고 내림차순으로 10에서 인덱스를 빼니 조건을 안줘도 문제가 없었다
for(i=0;i<10;i++){
if(n-factorial_Arr[i]===0){
return i+1
}else if(n-factorial_Arr[i]<0) return i
갑자기 생각난건데 이렇게 해줘도 되겠다
앞에 말한 내림차순으로 하는 것보단 길어도 처음 만들었던 코드보다 나아보인다
그래도 점점 발전하고 있다!
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| Set 자료구조로 문자열 전달 (0) | 2023.06.15 |
|---|---|
| for문에서 특정 숫자로 반복이 필요할 때 (0) | 2023.06.15 |
| 스코프 활용 (0) | 2023.06.15 |
| 대소문자 반대로 (0) | 2023.06.14 |
| 숫자야구 (0) | 2023.06.14 |