[프로그래머스/LV2] 2022 KAKAO BLIND RECRUITMENT k진수에서 소수 개수 구하기 - 비트 && 진법 (Java)
[프로그래머스/LV2] k진수에서 소수 개수 구하기 문제를 Java로 해결한 풀이입니다. 진법을 활용한 풀이로 설명합니다.
[프로그래머스/LV2] 2022 KAKAO BLIND RECRUITMENT k진수에서 소수 개수 구하기
🙋♂️ 들어가며
우선 이 문제에서는 중요한 것은 다음과 같다
"0"을 기준으로 문자열을 분리하는 것- 분리된 문자 배열에서 isEmpty() 일때 예외처리
- 분리한 비트문자가 2가 10자리인 2222222222 이기만해도 long 이라 int 불가능
- 소수 판별은 제곱근 중 1개만 나누어져도 바로 prime으로 판정
✅ 정답 코드
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
50
51
52
53
54
class Solution {
static int answer;
public int solution(int n, int k) {
answer = 0;
String str= "";
// 1. 진수 변환
StringBuilder sb = new StringBuilder();
while (n > 0) {
int remainder = n % k;
sb.append(remainder);
n /= k;
}
str += sb.reverse().toString();
// 2. arr에 "0"으로 공백을 부여하여 추가
String[] arr = str.split("0");
System.out.println(Arrays.toString(arr));
// 3. 소수 판별
is_prime(arr);
return answer;
}
// 4. 소수 판별 함수
static void is_prime(String[] arr) {
for (int i = 0; i < arr.length; i++) {
// 4-1. 예외 처리
if (arr[i].isEmpty()) continue;
// 4-2. 그 외 2이상 숫자들
long cur_num = Long.parseLong(arr[i]);
// 4-3. 예외처리
if (cur_num == 1) continue;
// 4-4. 2이상 숫자들
boolean prime = true;
for (int j = 2; j < (int) Math.sqrt(cur_num) + 1; j++) {
// 4-5. 제곱근 중에 약수가 하나만 나눠져도 소수X
if (cur_num % j == 0) {
prime = false;
break;
}
}
// 4-6. 소수 판별이면 answer++
if (prime) answer++;
}
}
}
This post is licensed under CC BY 4.0 by the author.
