Javascript/문제 풀이

프로그래머스 17일차

아라라_ 2023. 6. 2. 01:23

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

최댓값 만들기

 

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

function solution(numbers) {
    numbers.sort((a,b)=>b-a);
    return numbers[0]*numbers[1];
}

numbers.sort((a,b)=>b-a)를 통해 numbers 배열을 내림차순으로 정렬합니다. 이를 통해 배열의 첫 번째 원소가 가장 큰 값이 되도록 합니다. 그리고 return numbers[0]*numbers[1]을 통해 정렬된 배열의 첫 번째 원소와 두 번째 원소를 곱한 값을 반환합니다. 이는 정렬된 배열에서 가장 큰 두 수를 선택하여 곱한 값이기 때문에, 주어진 배열에서 두 개의 수를 곱해 만들 수 있는 최댓값이 됩니다. 예를 들어, 주어진 numbers 배열이 [3, 5, 1, 2, 4]라면, 정렬 후 [5, 4, 3, 2, 1]이 됩니다. 그리고 numbers[0]*numbers[1]은 5와 4를 곱한 20을 반환합니다. 따라서 이 값이 solution 함수의 반환 값으로 출력됩니다.

 

 

팩트리얼


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

function solution(n) {
    let ans = 1;

    for(let i = 1; i <= n; i++){
        ans *= i;
        
        if(ans === n){
            return i;
        }
        
        if(ans > n){
            return i - 1;
        }
    }
}

변수 ans를 1로 초기화합니다. 이 변수는 팩토리얼 값을 계산하는 과정에서 사용됩니다. 그리고 1부터 n까지의 모든 정수에 대해 반복문을 실행합니다. 이 반복문은 i 값을 증가시키며 팩토리얼 값을 계산하고 조건을 확인하는 목적으로 사용됩니다. 반복문 내부에서는 ans 변수에 i 값을 곱해 갱신합니다. 이는 팩토리얼 값을 계산하는 과정입니다. 그리고 ans 값이 n과 일치하는지 확인합니다. 만약 일치한다면 i 값을 반환합니다. 이는 n에 해당하는 팩토리얼 값이 존재하는 경우입니다. 만약 ans 값이 n보다 크다면 i - 1 값을 반환합니다. 이는 n에 가장 근접한 팩토리얼 값의 i 값을 반환하는 것입니다. 반복문이 모두 종료되면 n에 해당하는 팩토리얼 값이 존재하지 않는다는 의미이므로 n보다 작은 가장 큰 팩토리얼 값의 i 값을 반환합니다. 예를 들어, 주어진 n이 120인 경우를 생각해보겠습니다. 반복문을 순회하면서 i 값을 증가시키며 ans 값을 갱신하게 됩니다. i가 5일 때 ans는 120이 되며, 조건을 만족하므로 5를 반환합니다. 반면, 주어진 n이 150인 경우를 생각해보겠습니다. 반복문을 순회하면서 i 값을 증가시키며 ans 값을 갱신하게 됩니다. i가 7일 때 ans는 5040이 되며, 조건을 만족하지 않으므로 이전 i 값인 6을 반환합니다. 이를 통해 solution 함수는 주어진 조건을 만족하는 가장 큰 정수 i를 반환합니다.