반응형
programmers.co.kr/learn/courses/30/lessons/42895?language=javascript
backtracking으로 푼 문제였습니다.
풀이방법
모든 경우의 수를 dfs를 사칙연산에 대해 계속 호출하는 방식으로 해결했습니다.
Code
let ans = 0x3f3f3f3f;
let n, num;
function dfs(depth, sum) {
if (depth > 8) return -1;
if (sum == num) {
ans = Math.min(ans, depth);
return;
}
let tmp = 0;
for (let i = 0; i < 8; i++) {
tmp = tmp * 10 + n;
dfs(depth + i + 1, sum + tmp);
dfs(depth + i + 1, sum - tmp);
dfs(depth + i + 1, sum * tmp);
dfs(depth + i + 1, parseInt(sum / tmp));
}
}
function solution(N, number) {
n = N;
num = number;
ans = 0x3f3f3f3f;
dfs(0, 0);
if (ans > 8) return -1;
return ans;
}
console.log(solution(5, 12));
'Algorithm > DFS' 카테고리의 다른 글
(C++) - 프로그래머스(2017 카카오 코드 본선) : 단체사진 찍기 (0) | 2021.05.10 |
---|---|
(C++) - 프로그래머스(2019 카카오 개발자 겨울 인턴십) : 불량 사용자 (0) | 2021.05.07 |
(C++) - 프로그래머스(월간 코드 챌린지 시즌2) : 모두 0으로 만들기 (0) | 2021.04.21 |
(C++) - 백준(BOJ) 12101번 : 1, 2, 3 더하기 2 (0) | 2021.04.21 |
(C++) - 백준(BOJ) 13023번 : ABCDE (0) | 2021.04.19 |