λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm/Coding Test

Kakao 2022 Blind Test - Lv2. kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ° (Java)

by Edlin 2022. 6. 4.

문제 μš”μ•½

μ–‘μ˜ μ •μˆ˜ n을 kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ— 10μ§„μˆ˜ κΈ°μ€€ μ†Œμˆ˜κ°€ λͺ‡ κ°œμΈκ°€?

 

[μ œν•œ 쑰건] PλŠ” μ†Œμˆ˜

  • 0P0처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 0이 μžˆλŠ” 경우
  • P0처럼 μ†Œμˆ˜ 였λ₯Έμͺ½μ—λ§Œ 0이 있고 μ™Όμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우
  • 0P처럼 μ†Œμˆ˜ μ™Όμͺ½μ—λ§Œ 0이 있고 였λ₯Έμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우
  • P처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 아무것도 μ—†λŠ” 경우
    • 예λ₯Ό λ“€μ–΄ μˆ«μžκ°€ 222인 경우, 숫자λ₯Ό λΆ„ν•΄ν•˜μ—¬ μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜μ§€ μ•ŠμŒ = μ†Œμˆ˜κ°€ μ•„λ‹Œ 수
  • 단, PλŠ” 각 μžλ¦Ώμˆ˜μ— 0을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ†Œμˆ˜
    • 예λ₯Ό λ“€μ–΄, 101은 Pκ°€ 될 수 μ—†μŒ

 

[μž…μΆœλ ₯]

  1. n: μ–‘μ˜ μ •μˆ˜ (1 ≤ n ≤ 1,000,000)
  2. k: kμ§„μˆ˜ (3 ≤ k ≤ 10)
n k result
437674 3 3

문제 μ ‘κ·Ό 

μžμ„Έν•œ μ ‘κ·Ό 법은 μ½”λ“œμ˜ 주석을 ν™•μΈν•˜μ„Έμš” πŸ™‚
// 22. 06. 03. 금 - 카카였 2022 λΈ”λΌμΈλ“œ - Lv.2 - k μ§„μˆ˜μ—μ„œ μ†Œ 개수 κ΅¬ν•˜κΈ°

public class Solution {
    public static void main(String[] args) {
        System.out.println(solution(437674, 3));
    }

    public static int solution(int n, int k) {
        int answer = 0; // μ†Œμˆ˜μ˜ 개수

        // ** μ–‘μ˜ μ •μˆ˜ n을 kμ§„λ²•μ˜ 수둜 λ§Œλ“ λ‹€.
        //  - μ–‘μ˜ μ •μˆ˜ n을 kμ§„λ²•μ˜ 수둜 λ§Œλ“€λ©΄μ„œ λ‚˜λ¨Έμ§€κ°€ 0이기 μ „κΉŒμ§€μ˜ μˆ˜κ°€ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•œλ‹€. 단 1은 μ œμ™Έν•œλ‹€.
        String base_k = "";
        int remainder = 0;
        while (n >= k) {
            remainder = n % k;
            if (remainder == 0) {
                if (!base_k.isEmpty() && Integer.parseInt(base_k) != 1) {
                    if (isPrime(Long.parseLong(base_k))) answer++;
                }
                base_k = "";
            } else {
                base_k = remainder + base_k;
            }
            n /= k;
        }
        if (isPrime(Long.parseLong(n + base_k))) answer++;

        return answer;
    }

// μ†Œμˆ˜μ˜ μžλ¦Ώμˆ˜κ°€ int의 λ²”μœ„λ₯Ό λ„˜μ–΄μ„€ 수 있기 λ•Œλ¬Έμ— long type으둜 μΈμžλ°›κΈ°
    private static boolean isPrime(long n) {
        for (long i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
}

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/92335
 

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

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

programmers.co.kr

λŒ“κΈ€