https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(numbers) {
let answer = [];
const nums = numbers.split('').map(Number);
// 순서가 있으므로 순열
const getPermutations = (arr, selectNum) => {
const results = [];
if (selectNum === 1) return arr.map(num => [num]);
arr.forEach((fixed, idx, origin) => {
const rest = [...origin.slice(0, idx), ...origin.slice(idx+1)];
const permutations = getPermutations(rest, selectNum-1);
const attached = permutations.map(permutation => [fixed, ...permutation]);
results.push(...attached);
})
return results;
}
// 에라토스테네스의 체 활용
const isPrime = (num) => {
if (num === 1) return false;
for (let i=2; i<=Math.floor(Math.sqrt(num)); i++) {
if (num % i === 0) return false;
}
return true;
}
for (let i=1; i<=numbers.length; i++) {
const numbers = getPermutations(nums, i);
numbers.map(num => {
const number = Number(num.join(''));
if (isPrime(number)) {
answer.push(number);
}
})
}
answer = answer.filter(num => num !== 0);
return new Set(answer).size; // 동일한 값이 포함되어 있으므로 집합을 사용하여 중복 값 제거
}
'코딩테스트 > Programmers' 카테고리의 다른 글
실패율 (JS) (0) | 2025.01.05 |
---|---|
최소직사각형 (JS) (0) | 2024.06.02 |
12세 이하인 여자 환자 목록 출력하기 (MySQL) (0) | 2024.01.10 |
조건에 맞는 도서 리스트 출력하기 (MySQL) (2) | 2024.01.09 |
평균 일일 대여 요금 구하기 (MySQL) (0) | 2024.01.08 |