Javascript/문제 풀이

프로그래머스 12일차

아라라_ 2023. 5. 28. 23:27

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

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

가위 바위 보

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

function solution(rsp) {
    return Array.from(rsp).map(v => {
        switch(+v) {
            case 2:
                return 0
            case 0:
                return 5
            default:
                return 2
        }
    }).join('');
}

 

가위(2), 바위(0), 보(5)를 순서대로 나타낸 문자열 rsp를 받아서, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 반환하는 함수를 작성하는 것입니다.

해당 문제를 해결하기 위해 주어진 솔루션 함수인 solution을 살펴보겠습니다.

먼저, Array.from(rsp)는 주어진 문자열 rsp를 배열로 변환합니다. 이를 통해 문자열의 각 문자에 접근할 수 있습니다.

그런 다음, map 함수를 사용하여 배열의 각 요소에 접근하고, 해당 요소를 가지고 새로운 값을 반환합니다. 이 때, switch 문을 사용하여 요소의 값에 따라 다른 동작을 수행합니다.

case 2에서는 가위(2)인 경우를 처리하여 0을 반환합니다.
case 0에서는 바위(0)인 경우를 처리하여 5를 반환합니다.
default는 위의 두 경우가 아닌 경우로 보(5)인 경우를 처리하여 2를 반환합니다.
이렇게 변환된 배열을 join('')을 사용하여 다시 문자열로 합칩니다. 이렇게 하면 rsp에 저장된 가위 바위 보를 모두 이기는 경우를 나타내는 문자열을 얻을 수 있습니다.

예를 들어, rsp가 "2020"인 경우, 다음과 같이 작업이 수행됩니다:

"2020"을 배열로 변환하면 [2, 0, 2, 0]이 됩니다.
map 함수를 사용하여 각 요소에 접근하고, 2인 경우는 0을 반환하고, 0인 경우는 5를 반환하며, 나머지 경우는 2를 반환합니다. 따라서 [0, 5, 0, 5]가 됩니다.
join('')을 사용하여 배열을 다시 문자열로 합치면 "0505"가 반환됩니다.
따라서, 주어진 함수 solution은 "2020"을 입력으로 받았을 때 "0505"를 반환합니다

 

 

구슬을 나누는 경우의 수

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

function factorial(n){
    let bigN = BigInt(n);
    
    if(bigN === BigInt(1) || bigN === BigInt(0)){
        return BigInt(1);
    }
    
    return bigN * factorial(bigN - BigInt(1));
}

function solution(balls, share) {
    const n = balls;
    const m = share;
    
    return factorial(n) / (factorial(n - m) * factorial(m));  
}

루션 함수 내에 factorial 함수가 정의되어 있습니다. 이 함수는 주어진 수 n의 팩토리얼을 계산하여 반환하는 역할을 합니다. 팩토리얼은 양의 정수 n에 대해 n!로 표현되며, n부터 1까지의 모든 양의 정수를 곱한 값을 의미합니다. 주어진 factorial 함수는 재귀적인 방식으로 구현되어 있습니다. 함수 내에서 BigInt를 사용하여 정수의 범위를 넘어선 큰 수를 다룰 수 있도록 처리하고 있습니다. 함수는 n이 1 또는 0인 경우에는 1을 반환하고, 그 외의 경우에는 n에 n-1을 곱한 값을 반환합니다. 이어서 solution 함수를 살펴보면, balls를 n으로, share를 m으로 할당합니다. solution 함수는 주어진 공식을 사용하여 경우의 수를 계산합니다. 이 공식은 조합을 계산하는 공식으로, n개 중에서 m개를 선택하는 경우의 수를 의미합니다. 공식은 다음과 같이 구성됩니다

 

조합 = n! / ( (n-m)! * m! )

 

위의 공식을 사용하여 factorial(n)을 factorial(n - m) * factorial(m)으로 나눈 값을 반환합니다. 예를 들어, balls가 5이고 share가 2인 경우, n은 5, m은 2가 됩니다. 이를 공식에 대입하여 계산하면 다음과 같습니다

 

조합 = 5! / ( (5-2)! * 2! )
     = 5! / ( 3! * 2! )
     = (5 * 4 * 3 * 2 * 1) / ( (3 * 2 * 1) * (2 * 1) )
     = (5 * 4) / (2 * 1)
     = 10

 

주어진 함수 solution은 balls가 5이고 share가 2인 경우 10을 반환합니다. 이는 5개의 구슬 중 2개의 구슬을 선택하는 경우의 수입니다.