Search

소수 찾기

알고리즘
연습문제
플랫폼
프로그래머스
JCF
HashSet
Integer
상태
해결
생성 일시
2024/01/29 10:50
최종 편집 일시
2024/01/30 07:52

문제 설명

해결과정

Solution.java

import java.util.*; class Solution { public int solution(String numbers) { // 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하는 answer int answer = 0; // numbers의 각 자리의 문자들로 만들었는지 확인하는 boolean 배열 visited boolean[] visited = new boolean[numbers.length()]; // numbers의 각 자리의 문자들로 만든 숫자를 집어넣을 HashSet Set<Integer> set = new HashSet<>(); // 빈 문자열부터 재귀함수 실행 dfs(numbers, "", visited, set); // System.out.println(set); for(int i : set) { // System.out.println(i + " " + sqrt(i)); switch (i) { case 0 : break; case 1 : break; case 2 : answer++; break; case 3 : answer++; break; default : if(!isPrime(i)) { answer++; } break; } } return answer; } // 매개변수 가 2부터 제곱근 까지 나누어 떨어지는지 확인 public boolean isPrime(int number) { boolean check = false; for(int i = 2; i < sqrt(number); i++) { if(number % i == 0) { check = true; break; } } return check; } // 제곱근에 반 올림 하는 함수 public int sqrt(int number) { return ((int) Math.sqrt(number)) + 1; } // 정수인지 판단하는 함수 public boolean isNumeric(String number) { try { Integer.parseInt(number); return true; } catch(NumberFormatException e) { return false; } } public void dfs(String numbers, String number, boolean[] visited, Set<Integer> set) { // 매개변수로 들어온 number가 정수로 변환될수 있는지 확인 if(isNumeric(number)) { // 정수로 변환된 number 문자열을 HashSet에 집어넣는다. set.add(Integer.parseInt(number)); } // 다음 문자열을 찾기 위해 numbers 문자열을 탐색한다. for (int i = 0; i < numbers.length(); i++) { // 현재 탐색한 문자가 이전에 탐색한 문자가 아니라면 if (!visited[i]) { // 현재 문자를 탐색했다고 visited에 표시 visited[i] = true; // 현재 탐색한 문자를 기존 문자열에 추가한뒤 재귀함수 실행 dfs(numbers, number + numbers.charAt(i), visited, set); // 기존에 탐색을 재 진행하기 위해 현재 방문은 다시 체크 visited[i] = false; } } } }
Java
복사