[프로그래머스/JavaScript] 소수 찾기

2025. 7. 18. 16:11·Problem Solving/프로그래머스

문제

한 자리 숫자가 적힌 종이 조각이 흩어져 있다. 흩어진 종이 조각을 붙여 몇 개의 소수를 만들 수 있는 지 알고 싶다.

각 종이 조각을 붙인 문자열 `numbers`가 주어진다.

  • 1 ≤  `numbers` ≤ 7

 

풀이

`numbers`의 길이 범위가 1~7인 것으로 보아, 완전 탐색을 사용해도 성능 상 무리가 없다는 것을 알 수 있다.
순열의 경우, n개의 원소로 만들 수 있는 모든 경우의 수는 n!이며, 일반적으로 n ≤ 7~8일 때는 완전 탐색(브루트포스)이 안정적으로 동작한다.
예를 들어, n = 7이라면 7! = 5040개의 조합이 생성되며, 이는 1초 내에 충분히 탐색 가능한 수준이다.

다만 9 이상이 되면 경우의 수가 급격히 증가(9! = 362,880)하기 때문에 이 경우에는 백트래킹, 가지치기, DP 등의 최적화 기법이 요구된다.

 

`getCombinations`는 `path` 배열의 길이 0 이상이면 `result` `Set`에 경우의 수를 담는다. 만일 종이 조각의 숫자가 중복될 경우 중복된 숫자가 만들어질 수 있으므로 `Set`을 사용한다.

 

만들어진 숫자들을 소수 판별한 뒤 카운트해준다.

 

코드

function solution(numbers) {
    const result = new Set();
    const visited = Array(numbers.length).fill(false);
    
    function getCombinations(path) {
        if (path.length > 0) {
            result.add(Number(path.join("")));
        }
        for (let i = 0; i < numbers.length; i++) {
            if (visited[i]) continue;
            visited[i] = true;
            path.push(numbers[i]);
            getCombinations(path);
            path.pop(numbers[i]);
            visited[i] = false;
        }
    }
    
    getCombinations([]);
    
    let count = 0;
    for (const num of result) {
        if (isPrime(num)) {
            count++;
        }
    }
    return count;
}

function isPrime(num) {
    if (num < 2) return false;
    for (let i = 2; i <= Math.sqrt(num); i++) {
        if (num % i === 0) return false;
    }
    return true;
}

 

저작자표시 비영리 동일조건 (새창열림)

'Problem Solving > 프로그래머스' 카테고리의 다른 글

[프로그래머스/JavaScript] 조이스틱  (0) 2025.08.21
[프로그래머스/JavaScript] 프렌즈4블록  (0) 2025.07.03
[프로그래머스/JavaScript] 파일명 정렬  (0) 2025.07.01
[프로그래머스/JavaScript] 주차 요금 계산  (0) 2025.07.01
[프로그래머스/Java] 다트 게임  (2) 2025.05.30
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/JavaScript] 조이스틱
  • [프로그래머스/JavaScript] 프렌즈4블록
  • [프로그래머스/JavaScript] 파일명 정렬
  • [프로그래머스/JavaScript] 주차 요금 계산
friend5hip
friend5hip
개발 관련 지식이나 기록을 남기고 있습니다.
  • friend5hip
    friend5hip
    friend5hip
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 컴퓨터공학 (2)
        • 자료구조 (0)
        • 알고리즘 (1)
        • 데이터베이스 (1)
      • Problem Solving (42)
        • BOJ (25)
        • 프로그래머스 (15)
      • 언어 (2)
        • JavaScript (2)
      • 라이브러리 (12)
        • React (12)
      • 개발 (2)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    dfs
    백준
    BFS
    소수 판별
    투 포인터
    JavaScript
    이분 탐색
    시뮬레이션
    매개 변수 탐색
    구간 합
    누적 합
    dp
    집합
    완전 탐색
    문자열
    순열
    프로그래머스
    intersection observer
    코드트리
    java
    정렬
    N과 M
    맵
    수학
    백트래킹
    react
    구현
    vite
    삼성 sw 역량테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
friend5hip
[프로그래머스/JavaScript] 소수 찾기
상단으로

티스토리툴바