-
Notifications
You must be signed in to change notification settings - Fork 24
/
P97_3.java
49 lines (43 loc) · 1.53 KB
/
P97_3.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package ch24;
import java.util.ArrayDeque;
import java.util.Deque;
public class P97_3 {
// 소수 여부 판별 메소드
public boolean isPrime(long num) {
// 1은 소수가 아니며, 2이상인데 2로 나눠지면 소수가 아니므로 미리 처리
if (num == 1 || (num > 2 && num % 2 == 0))
return false;
// 3부터 차례대로 나눠지는지 확인
for (int i = 3; i <= (int) Math.sqrt(num); i += 2) {
if (num % i == 0)
return false;
}
return true;
}
public int solution(int n, int k) {
// 입력의 역순으로 추출해야 변환된 수가 완성되므로 스택 선언
Deque<Integer> stack = new ArrayDeque<>();
int remainder;
// k진수로 자릿수 단위로 변환하면서 스택 삽입
while (n != 0) {
remainder = n % k;
n /= k;
stack.push(remainder);
}
// 스택에서 추출하여 변환 완성
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty())
sb.append(stack.pop());
// 0을 기준으로 구분하여 각각 소수 여부 처리
int answer = 0;
for (String s : sb.toString().split("0")) {
// 00인 경우 빈 값이 될 수 있으므로 예외 처리
if (s.equals(""))
continue;
// 소수인 경우 정답 +1
if (isPrime(Long.parseLong(s)))
answer++;
}
return answer;
}
}