오늘 뭐했냐/기억하면 좋을 문제들

indexOf()

스스로에게 2023. 6. 15. 13:03

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

i! ≤ n

  1. 숫자 범위보다 큰 팩토리얼까지 모두 배열에 담는다
  2. 주어진 숫자를 배열에 담고 정렬했을 때 주어진 숫자가 어디에 위치하는지 찾으면 안될까?
  3. 문제의 숫자 범위는 10!까지
  4. 그런데 생각해보니 같은 값이면 어떻게 될까? 일단 해보자
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