티스토리 뷰

문제 설명
한 자리 숫자가 적힌 종이 조각이 흩어져있음.
모든 숫자 중 소수가 몇 개인지 확인해야함
자료 구조
가능한 모든 경우를 탐색해야하기 때문에 완전 탐색을 사용하였음.
주어진 숫자 조각으로 만들 수 있는 소수를 모두 확인해야 함.
해결 과정
1. 숫자 조각으로 만들 수 있는 조합 생성
- 단, 모든 조합을 생성하며 생기는 중복을 제거해야함. (Set 활용)
자바스크립트 세트(Set) 완벽 가이드
Engineering Blog by Dale Seo
www.daleseo.com
2. 생성된 숫자가 소수인지 확인
3. 소수 개수 반환
function isPrime(num) {
if (num <= 1) return false;
if (num === 2) return true;
if (num % 2 === 0) return false;
for (let i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i === 0) return false;
}
return true;
}
function getPermutations(arr, length) {
if (length === 1) return arr.map(v => [v]);
const permutations = [];
arr.forEach((v, i) => {
const rest = [...arr.slice(0, i), ...arr.slice(i + 1)];
const restPerms = getPermutations(rest, length - 1);
const attached = restPerms.map(p => [v, ...p]);
permutations.push(...attached);
});
return permutations;
}
function solution(numbers) {
const numberArr = numbers.split('');
const permutationsSet = new Set();
for (let length = 1; length <= numberArr.length; length++) {
const permutations = getPermutations(numberArr, length);
permutations.forEach(perm => {
const num = parseInt(perm.join(''), 10);
permutationsSet.add(num);
});
}
let primeCount = 0;
permutationsSet.forEach(num => {
if (isPrime(num)) {
primeCount += 1;
}
});
return primeCount;
}
isPrime 함수
- 주어진 숫자가 소수인가?
getPermutations
- 주어진 배열에서 특정 길이의 순열 생성 재귀 함수
완전 탐색을 이용해 가능한 모든 숫자 조합을 생성하고,
각 숫자가 소수인지 확인하는 방법을 사용해야 했다.
모든 경우를 탐색하기에 정확한 결과를 보장하는만큼 효율성에 신경써야 했으며
모든 숫자 조합 생성 시 발생하는 중복 제거를 Set 자료구조를 이용해 제거해주어야했다.
재귀 함수를 이용하므로 효율성 테스트를 걱정했는데,
무사히 통과할 수 있었다.
'Oops, All Code! > 🤯 Oops, My Algorithm!' 카테고리의 다른 글
| ꒰ྀི 06. 프로그래머스:: 올바른 괄호 (0) | 2024.07.17 |
|---|---|
| ꒰ྀི 05. 프로그래머스:: 큰 수 만들기 (0) | 2024.07.17 |
| ꒰ྀི 03. 프로그래머스:: 구명보트 (0) | 2024.07.16 |
| ꒰ྀི 02. 프로그래머스:: 주식가격 (0) | 2024.07.15 |
| ꒰ྀི 01. 프로그래머스:: 더 맵게 (0) | 2024.07.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- typescript
- 소사벌맛집
- 서평
- 트러블슈팅
- 카드뉴스
- 웹풀스택
- 어른의어휘공부
- 코딩테스트
- js
- 소사벌
- 우아한테크코스
- javascript
- 회고
- react
- 대학생플리마켓
- 부스트캠프
- 프론트엔드
- 도서추천
- 네이버부스트캠프
- 대학생팝업스토어
- 프리코스
- 경험플리마켓
- 일급객체
- 안성스타필드
- 프로토타입
- 도서리뷰
- 어휘력
- 카페추천
- 비즈플리마켓
- 책추천
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함