[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 소수 찾기

2026. 7. 7. 15:31·알고리즘 & 자료구조/문제 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

프로그래머스 소수 찾기 풀이

이 문제는 주어진 숫자 문자열로 만들 수 있는 모든 숫자 중 소수의 개수를 구하는 문제다.

각 숫자 조각을 한 번씩만 사용할 수 있으므로 visited 배열을 사용해 이미 사용한 숫자인지 체크했다.
DFS/백트래킹으로 숫자를 하나씩 붙이며 만들 수 있는 모든 순열을 생성했다.

예를 들어 "17"이라면 1, 7, 17, 71을 만들 수 있다.

중복 숫자가 생길 수 있기 때문에 생성한 숫자는 Set에 저장했다.
예를 들어 "117"에서는 위치가 다른 1을 사용해도 같은 숫자 117이 만들어질 수 있으므로 중복 제거가 필요하다.

모든 숫자를 만든 뒤에는 Set을 순회하면서 각 숫자가 소수인지 판별했다.
소수 판별은 2부터 i * i <= n까지만 나누어보면 된다.
약수는 짝으로 존재하기 때문에 제곱근까지만 확인해도 충분하다.

정리하면, 이 문제는 백트래킹으로 모든 숫자 순열을 만들고, Set으로 중복 제거 후 소수를 판별하는 완전탐색 문제다.



정답 코드

import java.util.*;

class Solution {

    int len;
    Set<Integer> set;
    boolean[] visited;
    String numbers;

    public int solution(String numbers) {
        this.len = numbers.length();
        set = new HashSet<>();
        this.visited = new boolean[len];
        this.numbers = numbers;
        
        dfs(new StringBuilder());


        int ans = 0;
        for(int n : set) {
            if(isPrime(n)) ans++;
        }

        return ans;
    }
    private void dfs(StringBuilder current) {
        if(current.length() > 0) {
            this.set.add(Integer.parseInt(current.toString()));
        }

        for(int i=0; i<len; i++) {
            if(visited[i]) continue;
            
            visited[i] = true;
            current.append(numbers.charAt(i));

            dfs(current);
            
            current.deleteCharAt(current.length() - 1);
            visited[i] = false;
        }
    }
    private boolean isPrime(int n) {
        if(n < 2) return false;
        
        for(int i=2; i*i <= n; i++) {
            if(n % i == 0) return false;
        }
        
        return true;
    }
}

 

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 타겟 넘버  (0) 2026.07.07
[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 퍼즐 조각 채우기  (0) 2026.07.06
[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 프로세스  (0) 2026.07.06
[프로그래머스 알고리즘 고득점 Kit][힙(Heap)][Java] 이중우선순위큐  (0) 2026.06.10
[프로그래머스 알고리즘 고득점 Kit][정렬][Java] H-Index  (0) 2026.05.26
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 타겟 넘버
  • [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 퍼즐 조각 채우기
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 프로세스
  • [프로그래머스 알고리즘 고득점 Kit][힙(Heap)][Java] 이중우선순위큐
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (73) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (38) N
        • 내용 정리 (2)
        • 문제 풀이 (36) N
      • 데이터베이스 (29) N
        • 내용 정리 (1)
        • 문제 풀이 (28) N
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

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

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    해시
    그래프
    분리집합
    삼성청년SW·AI아카데미
    Java
    블럭비교
    깊이/너비 우선 탐색(DFS/BFS)
    AVG
    정렬
    코테
    IFNULL
    이분탐색
    bfs
    dfs
    DP
    코딭테스트
    프로그래머스
    코딩테스트
    유니온파인드
    date_format
    mysql
    Round
    알고리즘
    코팅테스트
    바이브코딩
    동적계획법
    SQL
    coalesce
    like
    프로그래머스 알고리즘 고득점 kit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 소수 찾기
상단으로

티스토리툴바