https://school.programmers.co.kr/learn/courses/30/lessons/92335
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
조건에 따르면, 0을 기준으로 구분하여 만들어진 숫자 중 소수가 몇 개인지 구분해야 한다.
N을 K진수 String으로 변환한 뒤, StringTokenizer를 통해 소수인지 여부를 확인하는 식으로 구현했고,
N을 K진수로 변환할 때 Integer.parseInt(N,K)를 활용하는 방식 또한 있는데,
해당 문제를 풀 때 그 방식을 깜빡하여(...) K진수 변환을 직접 구현했다.
또한 소수 판정을 하는 효율적인? 방식에는 크게 두 가지가 있는데,
이 문제의 경우 소수의 길이가 최대 100만일 수 있기 때문에 에라토스테네스의 체를 사용하지 않고
확인해야 할 수의 제곱근까지 약수가 존재하는 지 여부를 확인하는 방식을 사용했다.
import java.io.*;
import java.util.*;
import java.math.*;
class Solution {
static int cnt;
public String decimalToKth(int num,int k){
int check = 1;
int N = num;
while(N/check>=1){
check *= k;
}
check /= k;
//n은 mul자리수인 k진수
String kthnum = "";
N = num;
while(check >= 1){
if(N > 0){
kthnum += Integer.toString(N/check);
N %= check;
}
else{
kthnum += Integer.toString(0);
}
check /= k;
}
return kthnum;
}
public static void findPrime(Long num){
if(num == 1){
return;
}
for(int i=2;i<=Math.sqrt(num);i++){
if(num%i == 0){
return;
}
}
cnt++;
}
public int solution(int n, int k) {
cnt = 0;
String KthNum = decimalToKth(n,k);
if(!KthNum.contains("0")){
findPrime(Long.parseLong(KthNum));
}
else{
StringTokenizer st = new StringTokenizer(KthNum,"0");
while(st.hasMoreTokens()){
findPrime(Long.parseLong(st.nextToken()));
}
}
return cnt;
}
}
'알고리즘 > 알문풀(백준, 프로그래머스, 코드트리)' 카테고리의 다른 글
[알고리즘] 2022 KAKAO BLIND 양과 늑대 (Java) (0) | 2024.04.17 |
---|---|
[알고리즘] 2022 KAKAO BLIND 파괴되지 않은 건물 (Java) (0) | 2024.03.27 |
[알고리즘] BOJ 10942 팰린드롬? (JAVA) (0) | 2024.03.07 |
[알고리즘] BOJ 2023 신기한 소수 (JAVA) (0) | 2024.02.21 |
[알고리즘] BOJ 1644 소수의 연속합 (JAVA) (1) | 2024.02.20 |
댓글