본문 바로가기
알고리즘

[프로그래머스] 소수찾기(완전탐색, 소수 찾기)

by 순원이 2024. 2. 23.

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

사고 과정

  • 완전 탐색으로 숫자 조합 배열에 저장하기
  • 배열 하나씩 돌면서 소수 찾기

 

코드

import java.util.HashSet;

public class Solution {
    HashSet<Integer> numberSet = new HashSet<>();
    
    public int solution(String numbers) {
        permutation("", numbers); // 가능한 모든 숫자 조합 생성
        return (int) numberSet.stream().filter(this::isPrime).count(); // 소수의 개수를 반환
    }
    
    void permutation(String prefix, String str) {
        int n = str.length();
        if (!prefix.isEmpty()) numberSet.add(Integer.valueOf(prefix)); // 숫자 조합을 HashSet에 추가
        for (int i = 0; i < n; i++)
            permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
    }
    
    boolean isPrime(int number) {
        if (number <= 1) return false; // 1 이하의 경우 소수가 아님
        for (int i = 2; i*i <= number; i++) { // 제곱근까지만 확인
            if (number % i == 0) return false; // 나누어떨어지면 소수가 아님
        }
        return true; // 소수임
    }
}
  • HashSet = 중복제거
  • 소수 찾는 법
  • 완전탐색 로직 익숙