티스토리 뷰
문제링크 ( https://programmers.co.kr/learn/courses/30/lessons/43165 )
내 풀이
- 재귀를 돌면서 operation 배열안에 +또는 -를 numbers만큼 채운다. (countWaysToMakeTarget)
- numbers만큼 채운 뒤에는 채워진 opertaion으로 숫자를 계산한다 (getCalculatedNumber)
- 계산한 숫자가 target과 같으면 answer을 증가시킨다.
function mySolution(numbers, target) {
var answer = 0;
const getCalculatedNumber = (operatorArr) =>
numbers.reduce((pre, cur, idx) =>
operatorArr[idx] === "+" ? pre + cur : pre - cur
, 0);
const countWaysToMakeTarget = (arr, cnt) => {
if (cnt === numbers.length) {
if (getCalculatedNumber(arr) === target) answer++;
return;
}
arr[cnt] = "+";
countWaysToMakeTarget(arr, cnt + 1);
arr[cnt] = "-";
countWaysToMakeTarget(arr, cnt + 1);
}
let initOperatorArr = new Array(numbers.length).fill("+");
countWaysToMakeTarget(initOperatorArr, 0)
return answer;
}
다른사람 풀이
- 연산자들을 따로 저장하지않고, 재귀를 탈 때 마다 sum을 합산하는 면에서 내 풀이보다 훨씬 효율적.
function goodSolution(numbers, target) {
let answer = 0;
function p(step, sum) {
if (step === numbers.length) {
if (sum === target) {
answer += 1;
}
return;
}
p(step + 1, sum + numbers[step]);
p(step + 1, sum - numbers[step]);
}
p(0, 0);
return answer;
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 점프와 순간이동 (0) | 2023.10.03 |
---|---|
프로그래머스 - 배달 (Javascript) (0) | 2022.01.26 |
[프로그래머스] 다리를 지나는 트럭 (Javascript) (0) | 2021.09.20 |
[프로그래머스] 프린터 (Javascript) (0) | 2021.09.20 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200503
- chapter8
- 20200427
- 20201204
- 20200406
- 20200415
- 20200319
- 20200330
- chapter7
- 20200804
- 20200428
- 20200429
- 20200622
- 20200317
- 20200624
- 20200403
- 20200510
- 20200424
- likelion
- 20200413
- 20200425
- 20200417
- 20200420
- 20200504
- 20200421
- 20200423
- 20200512
- 생활코딩리눅스
- 20200502
- 백준
- Total
- Today
- Yesterday