[level 3] Title: N으로 표현, Time: 18.34 ms, Memory: 11.3 MB -BaekjoonHub

This commit is contained in:
SSUM
2025-03-06 21:59:27 +09:00
parent 368bc396a4
commit 5a8adcd79f
2 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
def solution(N, number):
# dp[i]는 N을 i번 사용해서 만들 수 있는 숫자들의 집합
dp = [set() for _ in range(9)]
for i in range(1, 9):
# N을 i번 이어 붙인 수 (예: N=5, i=3이면 555)
dp[i].add(int(str(N) * i))
# 가능한 경우의 수: j와 i-j로 나누어 연산
for j in range(1, i):
for a in dp[j]:
for b in dp[i - j]:
dp[i].add(a + b)
dp[i].add(a - b)
dp[i].add(a * b)
if b != 0:
dp[i].add(a // b)
# 목표 number가 현재 집합에 포함되어 있으면, i 반환
if number in dp[i]:
return i
return -1

View File

@@ -0,0 +1,72 @@
# [level 3] N으로 표현 - 42895
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42895)
### 성능 요약
메모리: 11.3 MB, 시간: 18.34 ms
### 구분
코딩테스트 연습 > 동적계획법DynamicProgramming
### 채점결과
정확성: 100.0<br/>합계: 100.0 / 100.0
### 제출 일자
2025년 03월 06일 21:59:25
### 문제 설명
<p>아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.</p>
<p>12 = 5 + 5 + (5 / 5) + (5 / 5)<br>
12 = 55 / 5 + 5 / 5<br>
12 = (55 + 5) / 5</p>
<p>5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.<br>
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.</p>
<h5>제한사항</h5>
<ul>
<li>N은 1 이상 9 이하입니다.</li>
<li>number는 1 이상 32,000 이하입니다.</li>
<li>수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다.</li>
<li>최솟값이 8보다 크면 -1을 return 합니다.</li>
</ul>
<h5>입출력 예</h5>
<table class="table">
<thead><tr>
<th>N</th>
<th>number</th>
<th>return</th>
</tr>
</thead>
<tbody><tr>
<td>5</td>
<td>12</td>
<td>4</td>
</tr>
<tr>
<td>2</td>
<td>11</td>
<td>3</td>
</tr>
</tbody>
</table>
<h5>입출력 예 설명</h5>
<p>예제 #1<br>
문제에 나온 예와 같습니다.</p>
<p>예제 #2<br>
<code>11 = 22 / 2</code>와 같이 2를 3번만 사용하여 표현할 수 있습니다.</p>
<p>※ 공지 - 2020년 9월 3일 테스트케이스가 추가되었습니다.</p>
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges