Skip to content

Commit 9b35ee8

Browse files
committed
[level 2] Title: k진수에서 소수 개수 구하기, Time: 13.12 ms, Memory: 77.9 MB -BaekjoonHub
1 parent a6c34c3 commit 9b35ee8

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# [level 2] k진수에서 소수 개수 구하기 - 92335
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/92335)
4+
5+
### 성능 요약
6+
7+
메모리: 77.9 MB, 시간: 13.12 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 11월 10일 21:16:27
20+
21+
### 문제 설명
22+
23+
<h5>문제 설명</h5>
24+
25+
<p>양의 정수 <code>n</code>이 주어집니다. 이 숫자를 <code>k</code>진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.</p>
26+
27+
<ul>
28+
<li><code>0P0</code>처럼 소수 양쪽에 0이 있는 경우</li>
29+
<li><code>P0</code>처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우</li>
30+
<li><code>0P</code>처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우</li>
31+
<li><code>P</code>처럼 소수 양쪽에 아무것도 없는 경우</li>
32+
<li>단, <code>P</code>는 각 자릿수에 0을 포함하지 않는 소수입니다.
33+
34+
<ul>
35+
<li>예를 들어, 101은 <code>P</code>가 될 수 없습니다.</li>
36+
</ul></li>
37+
</ul>
38+
39+
<p>예를 들어, 437674을 3진수로 바꾸면 <code>211</code>0<code>2</code>01010<code>11</code>입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. (211, 2, 11을 <code>k</code>진법으로 보았을 때가 아닌, 10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) 211은 <code>P0</code> 형태에서 찾을 수 있으며, 2는 <code>0P0</code>에서, 11은 <code>0P</code>에서 찾을 수 있습니다.</p>
40+
41+
<p>정수 <code>n</code>과 <code>k</code>가 매개변수로 주어집니다. <code>n</code>을 <code>k</code>진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 <strong>위 조건에 맞는 소수</strong>의 개수를 return 하도록 solution 함수를 완성해 주세요.</p>
42+
43+
<hr>
44+
45+
<h5>제한사항</h5>
46+
47+
<ul>
48+
<li>1 ≤ <code>n</code> ≤ 1,000,000</li>
49+
<li>3 ≤ <code>k</code> ≤ 10</li>
50+
</ul>
51+
52+
<hr>
53+
54+
<h5>입출력 예</h5>
55+
<table class="table">
56+
<thead><tr>
57+
<th>n</th>
58+
<th>k</th>
59+
<th>result</th>
60+
</tr>
61+
</thead>
62+
<tbody><tr>
63+
<td>437674</td>
64+
<td>3</td>
65+
<td>3</td>
66+
</tr>
67+
<tr>
68+
<td>110011</td>
69+
<td>10</td>
70+
<td>2</td>
71+
</tr>
72+
</tbody>
73+
</table>
74+
<hr>
75+
76+
<h5>입출력 예 설명</h5>
77+
78+
<p><strong>입출력 예 #1</strong></p>
79+
80+
<p>문제 예시와 같습니다. </p>
81+
82+
<p><strong>입출력 예 #2</strong></p>
83+
84+
<p>110011을 10진수로 바꾸면 110011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 11, 11 2개입니다. 이와 같이, 중복되는 소수를 발견하더라도 모두 따로 세어야 합니다.</p>
85+
86+
<h5>문제가 잘 안풀린다면😢</h5>
87+
88+
<p>힌트가 필요한가요? [코딩테스트 연습 힌트 모음집]으로 오세요! → <a href="https://school.programmers.co.kr/learn/courses/14743?itm_content=lesson92335" target="_blank" rel="noopener">클릭</a></p>
89+
90+
91+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
3+
public int solution(int n, int k) {
4+
String currentN = change(n, k);
5+
int answer = 0;
6+
7+
String[] parts = currentN.split("0");
8+
for (String part : parts) {
9+
if (part.isEmpty()) continue;
10+
long num = Long.parseLong(part);
11+
if (isPrime(num)) answer++;
12+
}
13+
14+
return answer;
15+
}
16+
17+
static String change(int n, int k) {
18+
StringBuilder sb = new StringBuilder();
19+
while (n > 0) {
20+
sb.append(n % k);
21+
n /= k;
22+
}
23+
return sb.reverse().toString();
24+
}
25+
26+
static boolean isPrime(long num) {
27+
if (num < 2) return false;
28+
for (long i = 2; i * i <= num; i++) {
29+
if (num % i == 0) return false;
30+
}
31+
return true;
32+
}
33+
}

0 commit comments

Comments
 (0)