09009
[프로그래머스 lv2] k진수에서 소수 개수 구하기 본문
문제 보기
https://school.programmers.co.kr/learn/courses/30/lessons/92335
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결
처음에 Integer.parseInt로 해결하였을 때 테스트 케이스에 오류가 있었다. 이유를 알고보니 문제 예시에서 힌트를 찾을 수 있었다.
211020101011 -> 이 숫자는 int 범위를 넘어서 Long의 범위의 정수이다.
사실 위 정수는 문자열 "0"을 기준으로 split하면 [211, 2, 1, 1, 11] 이다. 이 때, 소수 여부를 확인할 때는 211, 2, 1 각각 확인하기 때문에 상관없으나 만약에 저 숫자에서 0이 없다고 가정해보자. 예를 들어 211121111111라고 하면 "0"을 기준으로 구분하여 소수 여부를 확인할 때 ([211121111111]) 이미 int 범위를 넘어선 Long의 범위의 정수가 되기 때문에 Long으로 꼭 변환을 해주어야 한다.
소스 코드
// https://school.programmers.co.kr/learn/courses/30/lessons/92335
import java.util.*;
class Solution {
public int solution(int n, int k) {
int answer = 0;
String number = convert(n, k);
String[] arr = number.split("0");
for (int i=0; i<arr.length; i++) {
if (arr[i].length() > 0) {
Long data = Long.parseLong(arr[i]);
if (isPrimeNumber(data)) {
answer++;
}
}
}
return answer;
}
// 소수 여부 확인 함수
public boolean isPrimeNumber(Long num) {
if (num <= 1)
return false;
else {
for (int i=2; i<(int)(Math.sqrt(num))+1; i++) {
if (num % i == 0)
return false;
}
}
return true;
}
// 진법 변환 함수
public String convert(int n, int k) {
String str = "";
while (n > 0) {
str = String.valueOf(n % k) + str;
n = n / k;
}
return str;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스 lv2] 숫자 변환하기 (0) | 2023.12.15 |
---|---|
[프로그래머스 lv2] 스킬트리 (0) | 2023.12.11 |
[프로그래머스 lv2] 프로세스 (0) | 2023.12.09 |
[프로그래머스 lv1] 옹알이 (2) (0) | 2023.12.08 |
[프로그래머스 lv0] 문자열 뒤집기 (0) | 2023.11.10 |
Comments