• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

동전교환 응용문제 질문

22.10.28 18:46 작성 조회수 229

0

선생님 섹션 8의 9번 동전교환 문제를 복습하면서 풀어보니 손에 익어서 이젠 풀 수 있게 되었습니다.

여기서 문제를 변형시켜서 가장 적은 동전갯수를 반환하는게 아닌, 가장 작은 동전 갯수를 가진 동전 종류의 배열 (해당 문제의 경우 [5,5,5])를 반환하도록 문제를 풀고있는 중인데요.

간단할 거 같았는데 의외로 잘 안풀리네요 ㅠㅠ

출력해보면서 이리저리 해보는데 접근 방법과 풀이를 알려주실 수 있을지 여쭙습니다.

아래는 여태 작성한 제 코드입니다.

                let answer = Number.MAX_SAFE_INTEGER
                let len = arr.length
                let tmp = []
                function DFS(L , sum){
                    if (sum > m) return
                    if (L > answer) return
                    if (sum === m) {
                        answer = Math.min(answer, L)
                        console.log(answer)
                        console.log(tmp)
                        tmp = []
                    }
                    else {
                        for (let i=0; i<len; i++){
                            
                            DFS(L+1 , sum+arr[i])
                            if (!tmp.length || tmp.reduce((a,b)=>a+b) <= m) tmp.push(arr[i])
                        }
                    }
                }
                DFS(0, 0)
                return answer
            }

            let arr=[1, 2, 5];
            console.log(solution(15, arr));

 

답변 1

답변을 작성해보세요.

0

안녕하세요^^ tmp 배열중에서 가장 짧은것을 답으로 하면 됩니다.

let answer = Number.MAX_SAFE_INTEGER
                let len = arr.length
                let tmp = []
                function DFS(L , sum){
                    if (sum > m) return
                    if (L > answer) return
                    if (sum === m) {
                        console.log(tmp)
                        answer = Math.min(answer, L)
                        console.log(answer)
                        console.log(tmp)
                        tmp = []
                    }
                    else {
                        for (let i=0; i<len; i++){
                            tmp.push(arr[i]);
                            DFS(L+1 , sum+arr[i])
                            tmp.pop();
                        }
                    }
                }
                DFS(0, 0)
                return answer
            }

            let arr=[1, 2, 5];
            console.log(solution(15, arr));