-
코딩테스트 고득점 kit / 완전탐색 / 소수 찾기알고리즘/프로그래머스 2020. 4. 10. 13:10
나의 풀이
import java.util.Set; import java.util.HashSet; class Solution { public void permutation(int[] arr, int start, int end, Set set){ if(start == end){ StringBuilder sb = new StringBuilder(); for(int i=0; i<start; i++){ sb.append(arr[i]); } int n = Integer.parseInt(String.valueOf(sb)); boolean b = true; if(n < 2) return; for(int i=2; i*i<=n; i++){ if(n % i == 0) { b = false; break; } } if(b) set.add(n); return; } for(int i=start; i<arr.length; i++){ swap(arr, start, i); permutation(arr, start + 1, end, set); swap(arr, start, i); } } public void swap(int[] arr, int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } public int solution(String numbers) { int answer = 0; int[] arr = new int[numbers.length()]; for(int i=0; i<numbers.length(); i++){ arr[i] = Character.getNumericValue(numbers.charAt(i)); } Set set = new HashSet(); for(int i=1; i<=arr.length; i++){ permutation(arr,0,i,set); } answer = set.size(); return answer; } }
이 문제는 순열을 활용하는 문제입니다.
처음에는 이 문제를 보고 다양한 풀이법을 생각하실 수 있습니다.
그러나 이중for문을 이용하여 substring을 이용해서 숫자들이 나올 수 있는 경우의 수를 구하려고 하면 "011" 로 "101"을 만들 수 없는 경우가 생깁니다.
그리고 Hash문제 풀때처럼 Map의 getOrDefault()메소드를 이용해서 숫자마다 개수를 Map에 저장하는 방법을 생각하면
그것을 이용해서 경우의 수 가짓수를 구하는 것 까지는 가능해도 가능한 문자열을 만드는 방법이 불가능해집니다.
따라서 순열을 이용해야 합니다.
즉, 모든 수를 나올 수 있는 경우의 수로 계산하려면 재귀함수를 이용한 순열을 사용하여야 합니다.
순열에 대한 풀이 방법은 아래링크의 개발자분 코드를 보고 참조하여 만들어봤습니다.
프로그래머스 알고리즘 : 소수 찾기 (java)
프로그래머스 알고리즘 (java) 소수 찾기 프로그래머스 (소수 찾기) 코드 리뷰 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하는 문제입..
jar100.tistory.com
다른 분들 풀이보니까 순열을 이용할때 swap 대신 substring을 사용하여 숫자를 교환하시는 분들도 있는데 나중에 한번 참고해서 공부해야겠습니다.
히스토리
chucoding/algorithm
알고리즘 문제풀이 사이트 도전~!! . Contribute to chucoding/algorithm development by creating an account on GitHub.
github.com
'알고리즘 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 / 연습문제 / 정수 내림차순으로 배치하기 (1) 2020.04.14 코딩테스트 연습 / 연습문제 / 자릿수 더하기 (0) 2020.04.13 코딩테스트 연습 / 연습문제 / 이상한 문자 만들기 (0) 2020.04.13 코딩테스트 연습 / 연습문제 / 소수 찾기 / JAVA (1) 2020.04.10 코딩테스트 고득점 kit / 완전탐색 / 모의고사 / JAVA (1) 2020.04.10