Post

[프로그래머스/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.

Trending Tags