728x90
반응형
출처 : https://programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예
numbersreturn
17 | 3 |
011 | 2 |
입출력 예 설명
예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.
예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.
- 11과 011은 같은 숫자로 취급합니다.
내가 쓴 정답
import java.util.*;
class Solution {
private HashSet<Integer> primeArr = new HashSet();
public int solution(String numbers) {
int[] arr = new int[numbers.length()];
for(int i=0; i<numbers.length(); i++) arr[i] = Integer.parseInt(numbers.substring(i,i+1));
for(int i=1; i<=numbers.length(); i++) permutation(arr, 0, i);
return primeArr.size();
}
public void permutation(int[] arr, int depth, int k) {
if (depth == k) {
int num = 0;
int j = k-1;
for (int i = 0; i < k; i++) num += arr[i] * Math.pow(10,j--);
//System.out.println("들어가기 전 : " + num);
Boolean chk = true;
if(num<2) chk = !chk;
else {
for(int i=2; i*i <= num; i++ ) {
if(num%i == 0) {chk = !chk; break;}
}
}
if(chk) {
//System.out.println("들어간 값 : " + num);
primeArr.add(num);
}
} else {
for (int i = depth; i < arr.length; i++) {
swap(arr, i, depth);
permutation(arr, depth + 1, k);
swap(arr, i, depth);
}
}
}
public int[] swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
}
728x90
반응형
'알고리즘 > 문제 풀이 (출처: 프로그래머스)' 카테고리의 다른 글
[JAVA] 124나라의 숫자_프로그래머스 level 2 (0) | 2020.04.09 |
---|---|
[JAVA][SORT] 가장 큰 수_프로그래머스 level 2 (0) | 2020.04.07 |
[JAVA][PERMUTATION] 숫자 야구_프로그래머스 level 2 (0) | 2020.04.06 |
[JAVA][DFS] 타겟넘버_프로그래머스 level 3 (0) | 2020.04.04 |
[JAVA][PriorityQueue][ArrayList] 디스크 컨트롤러_프로그래머스 level 3 (0) | 2020.04.04 |