-
[알고리즘] 프로그래머스 2단계 - 타겟 넘버카테고리 없음 2024. 5. 31. 13:36
프로그래머스 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12914
문제 설명
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
입출력 예제
numbers
[1, 1, 1, 1, 1]
target
3
return
5
import java.util.ArrayDeque; class Solution { public int solution(int[] numbers, int target) { int answer = 0; ArrayDeque<int[]> deque = new ArrayDeque<>(); // 시작 값, 현재 인덱스 deque.add(new int[]{0, 0}); while (!deque.isEmpty()) { int[] cur = deque.pop(); if (cur[1] == numbers.length) { if (cur[0] == target) { answer++; } continue; } int curVal = cur[0]; int addVal = numbers[cur[1]]; int nextIdx = cur[1] + 1; deque.add(new int[]{curVal + addVal, nextIdx}); deque.add(new int[]{curVal + (addVal * -1), nextIdx}); } return answer; } }