diff --git a/dohun/week2/ProgrammersKBasePrimeCount.java b/dohun/week2/ProgrammersKBasePrimeCount.java new file mode 100644 index 0000000..c7f12df --- /dev/null +++ b/dohun/week2/ProgrammersKBasePrimeCount.java @@ -0,0 +1,38 @@ +class ProgrammersKBasePrimeCount { + + public int solution(int n, int k) { + String kBaseNumberString = Integer.toString(n, k); // 1. k진수 변환 + String[] parts = kBaseNumberString.split("0"); // 2. 0 기준 분리 + + int count = 0; + + for (String p : parts) { + if (p.isEmpty()) { + continue; // 빈 문자열은 제외 + } + + long num = Long.parseLong(p); // 10진수로 변환 + if (isPrime(num)) { + count++; + } + } + + return count; + } + + private boolean isPrime(long num) { + // 2보다 작은 수는 소수가 아님 + if (num < 2) { + return false; + } + // 2부터 num의 제곱근까지 나누어 떨어지는지 확인 + for (long i = 2; i * i <= num; i++) { + // 나누어 떨어지면 소수가 아님 + if (num % i == 0) { + return false; + } + } + // 나누어 떨어지는 수가 없으면 소수임 + return true; + } +} diff --git a/dohun/week2/ProgrammersN2ArraySlice.java b/dohun/week2/ProgrammersN2ArraySlice.java new file mode 100644 index 0000000..6f868f0 --- /dev/null +++ b/dohun/week2/ProgrammersN2ArraySlice.java @@ -0,0 +1,19 @@ +class Solution { + public int[] solution(int n, long left, long right) { + // n x n 크기의 2차원 배열에서 left부터 right까지의 원소를 1차원 배열로 반환 + int length = (int) (right - left + 1); + + // 결과를 저장할 배열 초기화 + int[] result = new int[length]; + + // left부터 right까지의 인덱스에 해당하는 값을 계산하여 결과 배열에 저장 + for (long i = left; i <= right; i++) { + long row = i / n; // 행 번호 + long col = i % n; // 열 번호 + // 해당 위치의 값은 행 번호와 열 번호 중 큰 값에 1을 더한 값 + result[(int)(i - left)] = (int)(Math.max(row, col) + 1); + } + + return result; + } +}