| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- iOSDeveloper
- 알고리즘
- react
- 프로그래머스
- react-query
- UIKit
- frontend
- 회고
- 코딩테스트실력진단
- Apple Developer Academy
- AppleDeveloperAcademy
- 프로젝트
- tshaped
- error
- swiftUI
- 코드트리
- 자바스크립트
- Front-end
- TypeScript
- ios
- globalcommunity
- 프론트엔드
- JavaScript
- velog
- git
- SWIFT
- 코드트리챌린지
- 코딩테스트
- Xcode
- NextJs
Archives
- Today
- Total
Moon Work
[프로그래머스] 소수찾기_완전탐색 본문
소수찾기_완전 탐색 (level2)
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
풀이
완전 탐색에 순서에 따라 결과가 달라지기 때문에 Combination을 재귀함수를 통해 구현하도록 하였다.
- 숫자를 하나 뽑아서 기존에 더한 문자열에 더한다.
- 만들 수 있는 소수를 담은 array에 값이 이미 있는지 탐색한다.
- 이 값이 prime인이 isPrime 함수를 통해 bool값을 리턴 받는다.
- 위에 조건을 만족할 경우 primes에 추가한다.
- 추가로 더해야하는 값을 담은 rest array를 재귀함수로 요청한다.
- array의 길이가 1일 경우 기존 문자열과 더해서 소수 여부를 판단한다.
- 재귀가 끝난 뒤 소수를 담은 배열 primes의 길이를 리턴한다.
최종 코드
function solution(numbers) {
let nums = numbers.split('');
let primes = [];
function isPrime(number){
if(number === 0 || number === 1){
return false;
}
for(let i=2;i<=Math.sqrt(number);i++){
if(number%i===0){
return false;
}
}
return true;
}
function combs(numArr, concated, selectNum){
numArr.forEach((num,index,origin)=>{
if(selectNum ===1){
const testNum = concated + num;
if(!primes.includes(parseInt(testNum))){
if(isPrime(parseInt(testNum))){
primes.push(parseInt(testNum));
}
}
}
const testNum = concated + num;
if(!primes.includes(parseInt(testNum))){
if(isPrime(parseInt(testNum))){
primes.push(parseInt(testNum));
//console.log(`${testNum} is prime`);
}
}
const rest = [...origin.slice(0,index),...origin.slice(index+1)];
combs(rest, testNum, selectNum-1);
});
}
combs(nums, '', nums.length);
return primes.length;
}
더 나은 로직 또는 클린 코드를 위한 피드백은 감사히 받겠습니다 😄
'알고리즘' 카테고리의 다른 글
| [프로그래머스] 영어 끝말잇기_연습문제 (0) | 2022.05.29 |
|---|---|
| [프로그래머스] 스킬트리_연습문제 (0) | 2022.05.27 |
| [프로그래머스] 최댓값과 최솟값_연습문제 (0) | 2022.05.26 |
| [프로그래머스] 구명 보트_Greedy (0) | 2022.05.25 |
| [프로그래머스] 가장 큰 수_정렬 (0) | 2022.05.24 |