프로그래머스 N으로 표현 JavaScript

김건호·2021년 10월 15일
2
post-custom-banner

문제링크

function solution(N, number) {
    var answer = 0;
    var use = Array.from(new Array(9), () => new Set());
    if(N==number) return 1;
    else {
        use.forEach((element, index) => {
            if (index !== 0) element.add(Number(String(N).repeat(index)));
        });
        for(var i=1 ; i<=8 ; ++i) {
            for(var j=1 ; j<i ; ++j) {
                for(var first of use[j]) {
                    for(var second of use[i-j]) {
                        use[i].add(first+second);
                        use[i].add(first-second);
                        use[i].add(first*second);
                        use[i].add(first/second);
                    }
                } 
            }
            if(use[i].has(number)) return i;
        }
        return -1;
    }
    return answer;
}

동적계획법은 복잡한 문제를 간단하게 나누어서 푸는 문제입니다.

N을 1번 사용하는 경우(5)를 use에 저장합니다.
N을 2번 사용하는 경우(55, 5+5, 5*5, 5/5, 5-5)를 저장합니다.
N을 3번 사용하는 경우는 N을 1번 사용하는 경우와 N을 2번사용하는 경우를 사칙연산하여 저장합니다.
N을 4번 사용하는 경우는 N을 1번 3번, 2번 2번, 3번 1번 하는 경우를 사칙연산하여 저장합니다.
i는 N을 몇 번이나 사용했는지에 대한 변수입니다.
각 i에 대해 가능한 연산들을 추가하고, number가 있으면 i를 리턴합니다.

문제에서 N이 8보다 크면 -1을 리턴하라고 하였으므로, 반복문에서도 결정이 되지않으면 -1을 리턴합니다.

set
set.has
set.add
String.repeat

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 3월 19일

좋은 풀이 감사합니다!!

답글 달기