반응형
문제
N으로 표현
https://school.programmers.co.kr/learn/courses/30/lessons/42895
풀이
설명
N과 사칙연산만 사용해서 표현할 수 있는 방법 중 N 사용횟수의 최솟값을 구하는 문제입니다.
dp를 사용해 해결할 수 있습니다.
dp[i]는 N을 i번 사용해서 만들 수 있는 수들의 모음입니다.
N을 i번 사용해서 만든 수, dp[j]와 dp[i - j]의 조합으로 생성될 수 있습니다. (1 <= j < i)
점화식은 다음과 같습니다.
예시 코드
function solution(N, number) {
const MAX_N_LIMIT = 8;
const dp = Array.from({ length: MAX_N_LIMIT + 1 }, () => new Set());
for (let i = 1; i <= MAX_N_LIMIT; i++) {
dp[i].add(Number(String(N).repeat(i)));
for (let j = 1; j < i; j++) {
for (const a of dp[j]) {
for (const b of dp[i - j]) {
dp[i].add(a + b);
dp[i].add(a - b);
dp[i].add(a * b);
if (b != 0) dp[i].add(Math.floor(a / b));
}
}
}
if (dp[i].has(number)) return i;
}
return -1;
}
'Coding Problem > DP' 카테고리의 다른 글
[프로그래머스] 거스름돈 (0) | 2025.01.17 |
---|---|
[프로그래머스] 카운트 다운 (0) | 2024.12.28 |
[프로그래머스] 3 x n 타일링 (0) | 2024.12.25 |
[프로그래머스] 가장 큰 정사각형 찾기 (0) | 2024.11.23 |
[BOJ 1309] 동물원 (0) | 2024.10.19 |