🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
class Solution {
public int solution(int n, int k) {
int answer = 0;
String[] arr = Integer.toString(n, k).split("0"); // 진수 바꾸고 배열로 만듦
for(String s : arr) {
if(s.equals("")) continue; // 빈 문자열이면 패스
long number = Long.parseLong(s); // 오버플로우 방지 위해 long형 선언
if(isPrime(number)){
answer++;
}
}
return answer;
}
// 소수 판별 메소드 (에라토스테네스의 체)
public static boolean isPrime(long num){
if(num == 1) return false;
for(int i = 2 ; i <= (int)Math.sqrt(num) ; i++){
if(num % i == 0){
return false;
}
}
return true;
}
}
|
cs |
🧩 해결 아이디어
• 구현
- Integer.toString(n, k)
⇨ 10진수인 n을 k진수로 변환- 그러고 나서 0으로 분리해서 문자열 집합 만듦- 분리한 문자열이 빈 문자열이면, 패스. 빈 칸이 아니면 소수 판별 (에라토스테네스의 체 이용)
⚠ 소수 판별 함수의 받는 인자는 int형이 아닌 long형이어야 함
(데이터 범위가 커서 진수 변경 시 int형 범위를 넘을 수 있기 때문)
🔺 다른 풀이들
- 십진법에서 다른 진법으로 변환하는 과정이 다르다.
[프로그래머스,자바] Level2: K진수에서 소수 개수 구하기
문제풀이 문제보고 한 5분동안 멍 때린 문제다.... 처음 생각했을때, 문제 설명처럼 0P0 , 0P, P0, P인 경우를 모두 고려해서 뽑아야 하나 생각햇는데, 방법도 잘 떠오르지도 않으며 그냥 귀찮았다...
taehoung0102.tistory.com
while(num != 0) {
tmp = num % k + tmp;
num /= k;
}
💬 느낀 점
자꾸 TC 1번만 시간 초과가 뜨길래 어이가 없었다....
알고 보니 소수 판별 메소드에서 에라토스테네스의 체 활용할 때
i <= Math.sqrt(num)
이 아닌 i * i
를 쓰면서 오버플로우가 발생해서 그런 것 같다.!!!!
문제를 파악했으니 진짜 문제 해결 완,....
시간 초과코드 확인하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.*;
class Solution {
public int solution(int n, int k) {
int answer = 0;
String[] str = Integer.toString(n, k).split("0");
for(String s : str) {
if(s.equals("")) continue;
if(isPrime(Long.parseLong(s)))
answer++;
}
return answer;
}
static boolean isPrime(long num) {
if(num <= 1) return false;
for(int i = 2 ; i * i <= num ; i++) {
if(num % i == 0)
return false;
}
return true;
}
}
|
cs |
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240203 |
(참고)
2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기 (JAVA)
❓ 문제 - 2022 KAKAO BLIND RECRUITMENT k진수에서 소수 개수 구하기 - JAVA 풀이법 출처 (https://programmers.co.kr/learn/courses/30/lessons/92335) 코딩테스트 연습 - k진수에서 소수 개수 구하기 문제 설명 양의 정수 n
developer-ellen.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 더 맵게 (JAVA) (1) | 2023.09.28 |
---|---|
[프로그래머스/Lv. 3] 단어 변환 (JAVA) (0) | 2023.09.25 |
[프로그래머스/Lv. 2] 예상 대진표 (JAVA) (0) | 2023.09.25 |
[프로그래머스/Lv. 0] 5명씩 (JAVA) (0) | 2023.09.24 |
[프로그래머스/Lv. 2] 뒤에 있는 큰 수 찾기 (JAVA) (0) | 2023.09.24 |