문제 설명

제한 사항

입출력 예

풀이
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Solution {
public int solution(int n, int k) {
int answer = 0;
Pattern pat = Pattern.compile("[1-9]+");
Matcher mat = pat.matcher(Integer.toString(n, k));
while (mat.find()) {
long num = Long.parseLong(mat.group());
if (num != 1) answer += isPrime(num) ? 1 : 0;
}
return answer;
}
public boolean isPrime(long num) {
int result = 0;
for (long i = 1; i <= Math.sqrt(num); i++)
if (num % i == 0) result++;
return result == 1 ? true : false;
}
}
후기
처음에 문제 이해를 잘못해서 많이 헤맸다. 문제의 의도는 0 사이에 있는 값이 10진수 기준으로(다시 k진수로 바꾸면 안 된다!) 소수인지 판별하는 것인데 나는 부분으로 잘게 쪼개서 많은 수를 다 찾아야하는 줄 알았다... 그래도 풀다가 뭔가 이상해서 문제를 천천히 다시 읽었더니 잘못 풀고 있다는 것을 깨달았고 다른 방법으로 풀게 되었다. 0을 기준으로 나누는 것이라면 0을 제외한 숫자만 가져오면 된다고 생각해서 정규 표현식으로 아주 쉽게 풀 수 있었다.
이 문제는 1점만 받던 지난 문제 대부분과는 달리 특이하게 6점이라는 큰 점수를 받았다. 아마 내가 제출한 답이 다른 사람 풀이에 비슷한게 없었다는 점이 컸었던 것 같다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] n진수 게임 (0) | 2023.09.23 |
|---|---|
| [프로그래머스][JAVA][Lv. 2] 압축 (0) | 2023.09.22 |
| [프로그래머스][Java][Lv. 2] 전화번호 목록 (0) | 2023.09.19 |
| [프로그래머스][JAVA][Lv. 2] 타겟 넘버 (0) | 2023.09.18 |
| [프로그래머스][JAVA][Lv. 0] OX퀴즈 (0) | 2023.09.18 |