본문 바로가기
TIL

TIL 240705 - 알고리즘 코드카타 리뷰 - 타겟 넘버

by lemonpie611 2024. 7. 5.

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/43165

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수들의 배열을 받아서, 정수들을 더하거나 빼서 타겟 숫자로 만드는 경우의 수를 구하는 것이다.

 

2. 답안

+, - 별로 n중 for문을 만들 순 없어서 재귀함수를 활용했다.

plus, minus 함수에서 각각 sum 연산 후 plus, minus를 호출하는 식으로 코드를 작성했다.

function solution(numbers, target) {
  const plus = function (sum, numbers, i) {
    sum += numbers[i];
    if (i == numbers.length - 1 && sum == target) {
      cnt += 1;
    } else if (i != numbers.length - 1) {
      plus(sum, numbers, i + 1);
      minus(sum, numbers, i + 1);
    }
  };
  const minus = function (sum, numbers, i) {
    sum -= numbers[i];
    if (i == numbers.length - 1 && sum == target) {
      cnt += 1;
    } else if (i != numbers.length - 1) {
      plus(sum, numbers, i + 1);
      minus(sum, numbers, i + 1);
    }
  };
  let cnt = 0;
  plus(0, numbers, 0);
  minus(0, numbers, 0);

  return cnt;
}