ν‹°μŠ€ν† λ¦¬ λ·°

https://programmers.co.kr/learn/courses/30/lessons/92335

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ°

문제 μ„€λͺ… μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ§‘λ‹ˆλ‹€. 이 숫자λ₯Ό kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ— μ•„λž˜ 쑰건에 λ§žλŠ” μ†Œμˆ˜(Prime number)κ°€ λͺ‡ κ°œμΈμ§€ μ•Œμ•„λ³΄λ € ν•©λ‹ˆλ‹€. 0P0처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 0이 μžˆλŠ” 경우 P0처럼 μ†Œ

programmers.co.kr

[문제 풀이]

κ°„λ‹¨ν•œ λ¬Έμ œμ˜€λŠ”λ°, int ν˜•μ„ μ‚¬μš©μ‹œ λŸ°νƒ€μž„μ—λŸ¬κ°€ λ°œμƒν•˜μ—¬ 더 큰수λ₯Ό λ°›μ„μˆ˜μžˆκ²Œ Longν˜•μ„ μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

- μž…λ ₯받은 n을 String ν˜•μ‹μœΌλ‘œ kμ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ result둜 λ°˜ν™˜ν•©λ‹ˆλ‹€.

- count() ν•¨μˆ˜λ₯Ό 톡해 "0"을 κΈ°μ€€μœΌλ‘œ splitν•©λ‹ˆλ‹€.

- split된 String을 각각 Longν˜•μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ check()λ₯Ό 톡해 μ†Œμˆ˜μΈμ§€ ν™•μΈν•˜μ—¬ answer을 κ°±μ‹ ν•©λ‹ˆλ‹€.

 

μ΄λ•Œ, μ†Œμˆ˜λ₯Ό ν™•μΈν•˜λŠ” 방법은 μ•„λž˜μ˜ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

https://st-lab.tistory.com/81

 

JAVA [μžλ°”] - μ†Œμˆ˜ κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 및 κ΅¬ν˜„

λ“€μ–΄κ°€κΈ° 전에 μ†Œμˆ˜ [Prime Number] μ†Œμˆ˜μ˜ μ •μ˜λŠ” 1보닀 큰 μžμ—°μˆ˜ 쀑 1 κ³Ό κ·Έ 수 자기 μžμ‹ λ§Œμ„ μ•½μˆ˜λ‘œ κ°–λŠ” μžμ—°μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€λŠ” 점은 λˆ„κ΅¬λ‚˜ μ•Œκ³  μžˆμ„ 것이닀. 즉, μ†Œμˆ˜μ˜ μ•½μˆ˜λŠ” 2κ°œλ§Œμ„ κ°–κ³ ,

st-lab.tistory.com

 

[μ •λ‹΅ μ½”λ“œ]

class Solution {
    public static int answer = 0;
    public int solution(int n, int k) {
        String result = "";
        int num = n;
        int mod = 0;
        
        // k μ§„μˆ˜λ‘œ λ³€ν™˜
        while(num > 0) {
            mod = num%k;
            num = num/k;
            result = mod + result;
        }
        count(result);
        return answer;
    }
    public static void count(String str) {
        String[] strArr = str.split("0");
        for(int i=0;i<strArr.length;i++) {
            if(strArr[i].length() > 0) {
                Long num = Long.parseLong(strArr[i]);
                if(check(num)) {
                    answer++;
                }
            }
        }
    }
    public static boolean check(Long num) {
        if(num < 2L) {
            return false;
        } else if(num == 2L) {
            return true;
        }
        for(long i=2L;i<=Math.sqrt(num);i++) {
            if(num % i == 0) {
                return false;
            }
        }
        return true;
    }
}