풀이:
입력 예) "17"
function solution(numbers) {
const arr = numbers.split("");
const answer = new Set();
getNumber(arr, '');
이 아래 함수로 넘겨준다.
function getNumber(numbersArr, currentNumber) {
if (numbersArr.length) {
// arr 수만큼 돈다.
for (let i = 0; i < numbersArr.length; i++) {
// temp array 변수를 지정한다.
const temp = [...numbersArr];
// temp에서 i번째 값을 하나 떼온다.
temp.splice(i, 1);
// 소수 체크
if (isPrime(parseInt(currentNumber + numbersArr[i]))) {
answer.add(parseInt(currentNumber + numbersArr[i]))
}
// 재귀로 순서가 바뀐 temp, 현재 수 + 이번에 바뀐 수를 호출한다.
getNumber(temp, currentNumber + numbersArr[i])
}
}
}
1 7 이 내려간다.
temp.slice 가 1을 빼낸다
temp 에는 7이 남는다
소수체크에 뺴낸 1을 넣어 체크한다
소수가 아니다.
temp = 7 , '1' 로 재귀한다
7를 빼낸다,
temp 에는 아무것도 남지 않는다
1+7 = 17 을 소수 체크 한다
소수이니까 asnwer 에 넣는다
temp 에 아무숫자가 없다, 멈춘다.
다시 1 7 이 내려간다
이번엔 2번쨰 요소를 빼낸다, 7
temp 에는 1이 남는다
소수체크에 7 확인,
소수이니까 asnwer 에 넣는다
temp = 1, "7"로 재귀한다
1을 뺴낸다,
temp 에 아무것도 남아있지 않는다
7+1 =71 을 소수 체크한다
소수이니까 asnwer 에 넣는다
temp 에 아무숫자가 없다, 멈춘다.
누구나 이제 다 아는 소수 찾는 함수.
function isPrime(num) {
if (num < 2) return false;
if (num === 2) return true;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
}
return answer.size;
}
지금까지 넣은 unique 한 값의 갯수를 출력한다(.size)
코드:
function solution(numbers) {
const arr = numbers.split("");
const answer = new Set();
// 처음엔 배열과 빈 문자열을 파라미터로 넣는다.
getNumber(arr, '');
function getNumber(numbersArr, currentNumber) {
if (numbersArr.length) {
// arr 수만큼 돈다.
for (let i = 0; i < numbersArr.length; i++) {
// temp array 변수를 지정한다.
const temp = [...numbersArr];
// temp에서 i번째 값을 하나 떼온다.
temp.splice(i, 1);
// 소수 체크
if (isPrime(parseInt(currentNumber + numbersArr[i]))) {
answer.add(parseInt(currentNumber + numbersArr[i]))
}
// 재귀로 순서가 바뀐 temp, 현재 수 + 이번에 바뀐 수를 호출한다.
getNumber(temp, currentNumber + numbersArr[i])
}
}
}
function isPrime(num) {
if (num < 2) return false;
if (num === 2) return true;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
}
return answer.size;
}
'코드 풀이' 카테고리의 다른 글
백준 4948번 베르트랑 공준 소수 구하기 (0) | 2022.04.26 |
---|---|
피보나치 수 (1) | 2022.04.18 |
메뉴 리뉴얼 (0) | 2022.04.04 |
기능 개발 (0) | 2022.03.30 |
124 나라의 숫자 (0) | 2022.03.29 |