Skip to content

Commit 339fa9a

Browse files
committed
[level 3] Title: N으로 표현, Time: 23.65 ms, Memory: 82.6 MB -BaekjoonHub
1 parent b9a078d commit 339fa9a

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
5+
public int solution(int N, int number) {
6+
ArrayList<Set<Integer>> dp = new ArrayList<>();
7+
8+
// 1~8까지만
9+
for(int i = 0; i < 9; i++){
10+
dp.add(new HashSet<>());
11+
}
12+
for(int i = 1; i < 9;i++){
13+
Set<Integer> currentSet = dp.get(i);
14+
15+
StringBuilder stringBuilder = new StringBuilder();
16+
// N을 이어 붙이기
17+
for(int j = 0; j < i;j++){
18+
stringBuilder.append(N);
19+
}
20+
currentSet.add(Integer.parseInt(stringBuilder.toString()));
21+
22+
// 사칙연산을 통해 추가
23+
for(int j = 1;j < i; j++){
24+
int k = i - j;
25+
26+
Set<Integer> setK = dp.get(k);
27+
Set<Integer> setJ = dp.get(j);
28+
29+
for(int num1 : setK){
30+
for(int num2 : setJ) {
31+
currentSet.add(num1 + num2);
32+
currentSet.add(num1 - num2);
33+
currentSet.add(num1 * num2);
34+
if(num2 != 0){
35+
currentSet.add(num1 / num2);
36+
}
37+
}
38+
}
39+
}
40+
41+
// dp에서 number를 찾아서 반환
42+
if(currentSet.contains(number)){
43+
return i;
44+
}
45+
}
46+
47+
return -1;
48+
}
49+
50+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# [level 3] N으로 표현 - 42895
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42895)
4+
5+
### 성능 요약
6+
7+
메모리: 82.6 MB, 시간: 23.65 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 동적계획법(Dynamic Programming)
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 08월 31일 10:16:28
20+
21+
### 문제 설명
22+
23+
<p>아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.</p>
24+
25+
<p>12 = 5 + 5 + (5 / 5) + (5 / 5)<br>
26+
12 = 55 / 5 + 5 / 5<br>
27+
12 = (55 + 5) / 5</p>
28+
29+
<p>5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.<br>
30+
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.</p>
31+
32+
<h5>제한사항</h5>
33+
34+
<ul>
35+
<li>N은 1 이상 9 이하입니다.</li>
36+
<li>number는 1 이상 32,000 이하입니다.</li>
37+
<li>수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다.</li>
38+
<li>최솟값이 8보다 크면 -1을 return 합니다.</li>
39+
</ul>
40+
41+
<h5>입출력 예</h5>
42+
<table class="table">
43+
<thead><tr>
44+
<th>N</th>
45+
<th>number</th>
46+
<th>return</th>
47+
</tr>
48+
</thead>
49+
<tbody><tr>
50+
<td>5</td>
51+
<td>12</td>
52+
<td>4</td>
53+
</tr>
54+
<tr>
55+
<td>2</td>
56+
<td>11</td>
57+
<td>3</td>
58+
</tr>
59+
</tbody>
60+
</table>
61+
<h5>입출력 예 설명</h5>
62+
63+
<p>예제 #1<br>
64+
문제에 나온 예와 같습니다.</p>
65+
66+
<p>예제 #2<br>
67+
<code>11 = 22 / 2</code>와 같이 2를 3번만 사용하여 표현할 수 있습니다.</p>
68+
69+
<p>※ 공지 - 2020년 9월 3일 테스트케이스가 추가되었습니다.</p>
70+
71+
72+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

0 commit comments

Comments
 (0)