728x90
SMALL
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/468377
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
해당 문제는 2의 16승정도로 완전 탐색만 잘 구현하면 풀 수 있다.
아래와 같이 간략한 흐름이라고 생각하면 쉽게 구현 가능하다.
// 아주 매운맛을 다 뺀 완전 탐색의 뼈대 모양
function 가보자(스테이지번호) {
if (마지막) return 비용;
let 안사고_쭉_갔을때_비용 = 이번스테이지비용 + 가보자(다음스테이지);
let 사고_쭉_갔을때_비용 = 이번스테이지비용 + 번들비용 + 가보자(다음스테이지);
return Math.min(안사고_쭉_갔을때_비용, 사고_쭉_갔을때_비용);
}
코드 구현
function solution(cost, hint) {
var answer = 0;
let len = cost.length;
let rowLen = cost[0].length-1;
let myHints = new Array(len+1).fill(0);
function dfs(step, myHints){
if(step === len-1){
return cost[step][Math.min(myHints[step], rowLen)];
}
//1. 해당 번들을 사고 갈 경우
let bundleCost = hint[step][0];
let bundleHints = hint[step].slice(1);
bundleHints.forEach((item)=>myHints[item-1]++);
let curBuyHint = myHints[step];
let curBuyStageCost = cost[step][Math.min(curBuyHint, rowLen)];
let bundleOCost = curBuyStageCost + bundleCost + dfs(step+1, myHints);
bundleHints.forEach((item)=>myHints[item-1]--);
let curNoBuyHint = myHints[step];
let curNoBuyStageCost = cost[step][Math.min(curNoBuyHint, rowLen)];
//2. 해당 번들을 사지 않고 갈 경우
let bundleXcost = curNoBuyStageCost + dfs(step+1, myHints);
return Math.min(bundleXcost, bundleOCost);
}
answer = dfs(0, myHints);
return answer;
}'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][dfs] 여행 경로 (0) | 2026.07.15 |
|---|---|
| [프로그래머스][이분탐색] 선인장 숨기기 (0) | 2026.07.12 |
| [프로그래머스][문자열] 뉴스 클러스터링 (0) | 2025.12.06 |
| [프로그래머스][dp] 연속 펄스 부분 수열의 합 (0) | 2025.12.01 |
| [프로그래머스][브루트포스] 방문 길이 (0) | 2025.11.27 |