프로그래머스 소수 찾기
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예
numbers return
"17" 3
"011" 2
입출력 예 설명
예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.
예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.
11과 011은 같은 숫자로 취급합니다.
import java.util.*;
class Solution {
public int answer;
public boolean[] visited;
public int[] numberArr;
public List<Integer> primeList;
// 소수 판정 함수
public boolean isPrime(int num)
{
if (num < 2) return false;
for (int i = 2; i <= num/2; i++)
{
if (num%i == 0)
return false;
}
return true;
}
// dfs 로 순회하면서 소수 여부 판정
public void dfs(int num)
{
// 소수이고 아직 안 포함한 숫자면 추가
if (isPrime(num) && !primeList.contains(num))
{
primeList.add(num);
answer++;
}
// 다음 숫자 만들기
for (int j = 0; j < numberArr.length; j++)
{
if (!visited[j])
{
visited[j] = true;
dfs(10*num + numberArr[j]);
visited[j] = false;
}
}
}
public int solution(String numbers) {
answer = 0;
// 이미 센 소수인지 확인하기 위해서 ArrayList 선언
primeList = new ArrayList<>();
numberArr = new int[numbers.length()];
visited = new boolean[numbers.length()];
// String 숫자 하나씩 잘라서 int로 바꿔서 배열에 저장하기
for (int i = 0; i < numbers.length(); i++)
numberArr[i] = numbers.charAt(i) - '0';
for (int i = 0; i < numbers.length(); i++)
{
visited[i] = true;
if (numberArr[i] != 0)
dfs(numberArr[i]);
visited[i] = false;
}
return answer;
}
}
한줄 요약
- 이미 처리한지 여부 파악하려면
ArrayList.contains()
활용,HashSet
,TreeSet
도 활용해보자. int num = string.charAt(i) - '0'; // string을 int로 바꾸기
Author And Source
이 문제에 관하여(프로그래머스 소수 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@s2moon98/프로그래머스-소수-찾기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)