안녕하세요

프로그래머스 JS [소수 찾기 Lv.2]⭐⭐ n개를 선택한 순열 조합 본문

프로그래머스/Lv.2

프로그래머스 JS [소수 찾기 Lv.2]⭐⭐ n개를 선택한 순열 조합

sakuraop 2022. 12. 7. 02:25

소수 찾기 문제보기

문제 설명

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항
  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예numbersreturn
"17" 3
"011" 2

문제 풀이

1) 순열을 이용하여 1개~n개를 선택한 순열 조합을 만듭니다.

    const numbersArray = [...numbers];
    const 찾은소수 = new Set();
    const permutation = (i, array, pick) => {
        // 배열의 크기가 pick이 될 때 종료
        if (i === pick) {
            return;
        }
        for (let j = i; j < array.length; j++) {
            [array[i], array[j]] = [array[j], array[i]];
            permutation(i + 1, numbersArray, pick);
            [array[i], array[j]] = [array[j], array[i]];
        }
    };
    // 1개부터 numbers의 길이만큼을 고른 순열 조합 만들기
    for (let pick = 1; pick <= numbers.length; pick++) {
        permutation(0, numbersArray, pick);
    }
 
2) 에라토스테네스의 체를 이용하여 순열 조합에 대해 소수 판별을 시행합니다.

            if (prime(parseInt(array.slice(0, i).join("")))) {
                // slice(0,i)로 pick 개의 원소를 담은 조합 구하기
                찾은소수.add(parseInt(array.slice(0, i).join("")));
            }



🔻🔻🔻도움이 된 글🔻🔻🔻

[javascript] 순열, 조합, 중복순열, 중복조합





function solution(numbers) {
    const prime = (number) => {
        if (number === 2) return true;
        if (number === 1 || number % 2 === 0) return false;
        for (let i = 3; i * i <= number; i += 2) {
            if (number % i === 0) {
                return false;
            }
        }
        return true;
    };

    const numbersArray = [...numbers];
    const 찾은소수 = new Set();
    const permutation = (i, array, pick) => {
        if (i === pick) {
            if (prime(parseInt(array.slice(0, i).join("")))) {
                찾은소수.add(parseInt(array.slice(0, i).join("")));
            }
            return;
        }
        for (let j = i; j < array.length; j++) {
            [array[i], array[j]] = [array[j], array[i]];
            permutation(i + 1, numbersArray, pick);
            [array[i], array[j]] = [array[j], array[i]];
        }
    };

    for (let pick = 1; pick <= numbers.length; pick++) {
        permutation(0, numbersArray, pick);
    }
    console.log(찾은소수, "찾은소수", 찾은소수.size, "");
    return 찾은소수.size;
}
solution("1231");