ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] 프로그래머스 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;
        }
    }

    댓글

Designed by Tistory.