Skip to content

Commit b0b7b75

Browse files
committed
[level 2] Title: 소수 찾기, Time: 29.78 ms, Memory: 84.7 MB -BaekjoonHub
1 parent 2a9b470 commit b0b7b75

File tree

2 files changed

+34
-40
lines changed

2 files changed

+34
-40
lines changed

프로그래머스/2/42839. 소수 찾기/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### 성능 요약
66

7-
메모리: 95.3 MB, 시간: 22.82 ms
7+
메모리: 84.7 MB, 시간: 29.78 ms
88

99
### 구분
1010

@@ -16,7 +16,7 @@
1616

1717
### 제출 일자
1818

19-
2025년 08월 09일 15:07:01
19+
2025년 09월 03일 20:54:49
2020

2121
### 문제 설명
2222

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,46 @@
11
import java.util.*;
2+
23
class Solution {
3-
// 중복 방지
4-
Set<Integer> set = new HashSet<>();
5-
boolean[] visited;
4+
HashSet<Integer> set = new HashSet<>();
65
public int solution(String numbers) {
7-
char[] num = numbers.toCharArray();
8-
visited = new boolean[num.length];
9-
10-
for(int i =1 ; i <= num.length ; i++){
11-
premutation(num,"",i);
12-
}
13-
14-
int count = 0;
15-
for(int number: set){
16-
if(isPrime(number)){
17-
count++;
18-
}
19-
}
20-
21-
return count;
22-
}
23-
24-
private boolean isPrime(int number) {
25-
if(number<=1){
26-
return false;
27-
}
28-
for(int i=2 ; i <= Math.sqrt(number) ; i++){
29-
if(number % i == 0){
30-
return false;
6+
char[] nums = numbers.toCharArray();
7+
boolean[] visited = new boolean[nums.length];
8+
// 완전 탐색으로 숫자를 만듬
9+
dfs("",nums,visited);
10+
11+
int answer = 0;
12+
for(int num : set){
13+
if(isPrime(num)){
14+
answer ++;
3115
}
3216
}
33-
return true;
17+
18+
return answer;
3419
}
35-
36-
private void premutation(char[] num, String current, int maxLength) {
37-
if(current.length() == maxLength) {
20+
21+
public void dfs(String current, char[] nums, boolean[] visited){
22+
// set에 등록
23+
if(!current.equals("")){
3824
set.add(Integer.parseInt(current));
39-
return;
4025
}
41-
42-
for(int i = 0 ; i < num.length ; i++){
43-
if(visited[i] == false){
26+
27+
for(int i = 0; i<nums.length;i++){
28+
// 아직 사용 안 한 숫자
29+
if(!visited[i]){
4430
visited[i] = true;
45-
premutation(num,current + num[i],maxLength);
31+
dfs(current+nums[i],nums,visited);
4632
visited[i] = false;
4733
}
4834
}
49-
50-
35+
}
36+
37+
public boolean isPrime(int num){
38+
if(num < 2) return false;
39+
40+
for(int i = 2; i <= Math.sqrt(num); i++){
41+
if(num % i == 0) return false;
42+
}
43+
44+
return true;
5145
}
5246
}

0 commit comments

Comments
 (0)