https://school.programmers.co.kr/learn/courses/30/lessons/43165
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 주어진 숫자들을 더하거나 빼서 타켓 넘버를 만들 수 있는 방법의 수를 구하라 - 주어진 자료는 무엇인가?
- numbers = 숫자가 담긴 배열
- target = 타켓 넘버 - 조건은 무엇인가?
- 주어지는 숫자의 개수는 2개 이상 20개 이하
- 각 숫자는 1 이상 50 이하
- 타겟 넘버는 1 이상 1000 이하
2. 계획
- numbers의 첫번째 요소부터 하나씩 더하고 빼면서 값을 누적한다.
- 더하거나 뺀 요소는 제거하고 다시 1번을 반복한다.
- 누적값이 target과 같은것만 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (numbers, target, acc = 0) => {
if (numbers.length === 0) {
return target === acc ? 1 : 0;
}
const [first] = numbers;
const plus = first;
const minus = -first;
return solution(numbers.slice(1), target, acc + plus) +
solution(numbers.slice(1), target, acc + minus);
};
test('countMoney', () => {
expect(solution([1], 1)).toEqual(1);
expect(solution([1, 1, 1], 1)).toEqual(3);
expect(solution([1, 2, 4], 1)).toEqual(1);
expect(solution([2, 4, 1], 1)).toEqual(1);
expect(solution([4, 2, 1], 1)).toEqual(1);
expect(solution([2, 2, 2], 6)).toEqual(1);
expect(solution([1, 1, 1, 1, 1], 3)).toEqual(5);
expect(solution([4, 1, 2, 1], 4)).toEqual(2);
});
4. 반성
- 어떻게 풀어나가야할지 모르겠다면 점진적으로 생각해봐야겠다.
- 이런 부족한 유형의 문제들을 더 풀면서 풀이에 익숙해져야겠다.
'코테연습' 카테고리의 다른 글
80. k진수에서 소수 개수 구하기 Javascript (0) | 2022.07.28 |
---|---|
79. 문자열 내 마음대로 정렬하기 Javascript (0) | 2022.07.28 |
77. 두 정수 사이의 합 Javascript (0) | 2022.07.20 |
76. 나누어 떨어지는 숫자 배열 Javascript (0) | 2022.07.07 |
75. 소수찾기 Javascript (0) | 2022.07.05 |
댓글