99클럽 코테 스터디 15일차 TIL /[프로그래머스] 소수찾기

2024. 8. 5. 18:23·Algorithm/99클럽 코테 스터디
728x90
반응형

💡문제

[level 2] 소수 찾기 - 42839

문제 링크

성능 요약

메모리: 84.5 MB, 시간: 23.86 ms

 

 


🤔접근법

문제 요약

  • 1개 이상 7개 이하의 자연수들을 개수 상관없이 한번씩만 뽑아서 만들 수 있는 숫자가 소수인지 판별하는 문제

범위 체크 및 시간복잡도 예상

  • 1 ≤ numbers의 길이 ≤ 7
  • numbers를 이루고 있는 숫자 들은 0 ~ 9 자연수 이다.
  • $O(N^2)$ 보다는 작아야한다.

풀이법

⭕ 접근 방법. 완탐

  1. 숫자 문자열로부터 가능한 모든 순열 생성:
    • 각 자리 숫자를 사용하여 순열을 만들고, 각 순열조합이 소수인지 확인
    • 자리수의 중복을 방지하기 위해 방문 여부를 체크하는 배열을 사용
  2. 소수 판별:
    • 각 생성된 숫자가 소수인지 확인. 소수 판별은 2부터 해당 숫자의 제곱근까지의 수로 나누어지는지 확인하는 방식으로 수행하여 시간복잡도를 줄인다.
    • 소수라면 이를 HashSet 저장하여 중복된 소수의 처리를 방지한다.

➡️ 해당 풀이법의 시간 복잡도 : $O(N! \sqrt{N})$

 

 


😎SUCCESS

고냥 단박에 성공

 

👩‍💻 코드

import java.util.*;

class Solution {

    // 소수를 저장하는 HashSet, 중복 소수를 자동으로 제거함
    static HashSet<Integer> prime = new HashSet<>(); 
    // 각 종이 조각의 방문 여부를 체크하는 배열
    static boolean visited[]; 
    // 입력된 종이 조각 숫자 문자열
    static String nums; 

    // 주어진 종이 조각 숫자 문자열에서 만들 수 있는 소수의 개수를 반환하는 메서드
    public int solution(String numbers) {
        nums = numbers; // 전역 변수 nums에 입력된 숫자 문자열 할당
        visited = new boolean[numbers.length()]; // 숫자 문자열 길이만큼 방문 여부 배열 초기화

        // 숫자를 조합하여 소수를 찾는 메서드 호출
        makeNumber(0 , ""); 

        // HashSet에 저장된 소수의 개수를 정답으로 반환
        int answer = prime.size(); 
        return answer; // 소수의 개수 반환
    }

    // 주어진 깊이에서 숫자를 조합하여 소수를 찾는 메서드
    private void makeNumber(int depth, String number) {
        // 현재 조합된 숫자가 소수인지 확인
        if(!number.isEmpty()) {
            isPrime(number);
        }

        // 재귀 호출 종료 조건: 현재 깊이가 숫자 문자열 길이 이상일 때
        if(depth >= nums.length()){ 
            return; // 메서드 종료
        }

        // 숫자 문자열의 각 자리수를 순회하며 숫자 조합 생성
        for (int i = 0; i < nums.length(); i++) {
            if(visited[i]) continue; // 이미 방문한 자리수는 건너뜀
            visited[i] = true; // 현재 자리수 방문 처리
            number = number + nums.charAt(i); // 현재 자리수의 숫자를 조합에 추가
            makeNumber(depth+1, number); // 다음 깊이로 재귀 호출
            number = number.substring(0, number.length()-1); // 마지막에 추가한 자리수의 숫자를 제거
            visited[i] = false; // 방문 처리 해제
        }
    }

    // 주어진 문자열이 소수인지 확인하고, 소수라면 HashSet에 추가하는 메서드
    private void isPrime(String number) {
        int n = Integer.parseInt(number); // 문자열을 정수로 변환
        if(n == 0 || n == 1){ // 0이나 1은 소수가 아님
            return; // 메서드 종료
        }

        // 2부터 n의 제곱근까지의 수로 나누어지는지 확인
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if(n % i == 0) { // 나누어 떨어지면 소수가 아님
                return; // 메서드 종료
            }
        }

        // 소수라면 HashSet에 추가
        prime.add(n); 
    }
}

 

반응형

'Algorithm > 99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 13일차 TIL / [프로그래머스] 입국심사  (0) 2024.08.03
99클럽 코테 스터디 11일차 TIL /[프로그래머스]가장 큰 수  (0) 2024.08.01
99클럽 코테 스터디 10일차 TIL /[백준]최대힙  (0) 2024.07.31
99클럽 코테 스터디 9일차 TIL / [백준] 최소힙  (0) 2024.07.31
99클럽 코테 스터디 8일차 TIL [프로그래머스] 두 큐 합 같게 만들기  (0) 2024.07.29
'Algorithm/99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 13일차 TIL / [프로그래머스] 입국심사
  • 99클럽 코테 스터디 11일차 TIL /[프로그래머스]가장 큰 수
  • 99클럽 코테 스터디 10일차 TIL /[백준]최대힙
  • 99클럽 코테 스터디 9일차 TIL / [백준] 최소힙
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    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
  • 인기 글

  • 태그

    greedy
    Vue.js 입문하기
    알고리즘
    Spring
    김영한
    linux
    Vue
    자바 스택
    백준
    99클럽
    도커컨테이너
    springboot
    React
    docker
    백준 구현문제
    stack
    리액트 상태
    front-end
    java
    코딩테스트 준비
    Vue.js
    백준 java
    개발자 취업
    java stack
    도커
    topology sort
    항해99
    til
    java 백준
    자바
  • 07-14 04:09
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
99클럽 코테 스터디 15일차 TIL /[프로그래머스] 소수찾기
상단으로

티스토리툴바