프로그래머스 - 소수 찾기 (Java, 백트래킹, 소수, 에라토스테네스의 체)

2025. 3. 4. 23:47·알고리즘
728x90

아이디어

백트래킹 + 에라토스테네스의 체

 

백트래킹

완전탐색, 순열, 조합 문제의 경우 백트래킹을 먼저 시도해보는 편이다. 

일반적인 dfs 알고리즘에 visit 체크를 앞, 뒤로 추가하여 중복 방문을 막는다.

딱히 종료 조건이랄 것도 없어서 종료 조건은 따로 주지 않았다.

 

에라토스테네스의 체

소수를 판정하기 위해서는 특정 수보다 작은 수들로 나누어 떨어지는지 확인한다.

하지만, 특정 수보다 작은 모든 수를 탐색하는 경우 시간초과가 발생할 수 있다.

그러므로 에라토스테네스 체 알고리즘을 따라서 제곱근까지만 탐색한다.

sqrt 사용 시 부동 소수점 오류가 날 수 있어서 역으로 생각하여  i * i 가 x보다 작거나 같은 경우까지 탐색해주었다.

 

마지막으로 중복값 제거를 위해서 Set을 사용했다.

 

코드

import java.util.*;

class Solution {
    String nums = "";
    Boolean[] visit = new Boolean[8];
    Set<Integer> s = new HashSet<>();

    public int solution(String numbers) {
        nums = numbers;
        Arrays.fill(visit, false);

        for(int i = 0; i < numbers.length(); i++) {
            if(nums.charAt(i) != '0') {
                visit[i] = true;
                bt(nums.charAt(i) + "");
                visit[i] = false;
            }
        }

        return s.size();
    }

    public void bt(String tmp){
        Integer x = Integer.parseInt(tmp);
        if(x != 0 && x != 1 && sosu(x)) s.add(x);

        for(int i = 0; i < nums.length(); i++) {
            if(visit[i]) continue;
            visit[i] = true;
            bt(tmp + nums.charAt(i) + "");
            visit[i] = false;
        }
    }

    public Boolean sosu(Integer x){
        for(int i = 2; i * i <= x; i++)
            if(x % i == 0) return false;

        return true;
    }

}

728x90

'알고리즘' 카테고리의 다른 글

프로그래머스 - 조이스틱 (Java, 그리디)  (0) 2025.03.05
프로그래머스 - 전력망을 둘로 나누기 (Java, 완전 탐색, bfs)  (0) 2025.03.05
프로그래머스 - 이중우선순위큐 (Java)  (0) 2025.03.04
DP 개념과 문제풀이 방식  (0) 2024.08.20
포인터, alias 개념과 직접 구현 해시  (0) 2024.08.20
'알고리즘' 카테고리의 다른 글
  • 프로그래머스 - 조이스틱 (Java, 그리디)
  • 프로그래머스 - 전력망을 둘로 나누기 (Java, 완전 탐색, bfs)
  • 프로그래머스 - 이중우선순위큐 (Java)
  • DP 개념과 문제풀이 방식
suhsein
suhsein
티끌모아 태산
  • suhsein
    기억 못 할 거면 기록이라는 좋은 수단이 있다
    suhsein
  • 전체
    오늘
    어제
    • 분류 전체보기
      • ASAC
      • Next.js
      • Docker
      • MySQL
      • Java
      • Spring-Proxy, AOP
      • Spring Boot, JPA
      • Spring Security
      • DB
      • 알고리즘
      • PS
      • TOPCIT
      • AWS 자격증
      • 비공개
  • 블로그 메뉴

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

  • 공지사항

    • 안녕하세요
  • 인기 글

  • 태그

    오블완
    포인터
    tsp
    외판원순회
    해시
    티스토리챌린지
    Alias
    DP
    동적프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
suhsein
프로그래머스 - 소수 찾기 (Java, 백트래킹, 소수, 에라토스테네스의 체)
상단으로

티스토리툴바