[programmers] Java Lv.2 - 타겟 넘버

2025. 2. 18. 09:48·Algorithm Solving/Java

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 설명
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 이하인 자연수입니다.

 

입출력 예


입출력 예 설명
입출력 예 #1
문제 예시와 같습니다.

입출력 예 #2

+4+1-2+1 = 4
+4-1+2-1 = 4
  • 총 2가지 방법이 있으므로, 2를 return 합니다.

풀이

import java.util.*;

public class Main {
    public static void main(String[] args) {
        int[] numbers =  {4, 1, 2, 1};
        int target = 4;

        System.out.println(bfs(target, numbers));
    }

    private static int bfs(int target, int[] numbers) {
        int answer = 0;
        Queue<int[]> queue = new LinkedList<>(); // {sum, index} 형태
        queue.offer(new int[]{0, 0});

        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int sum = current[0];
            int index = current[1];

            // 마지막 인덱스일 경우
            if (index == numbers.length) {
                if (sum == target) answer ++; // 타겟 넘버와 일치하면 answer+1
            }
            else {
                // 다음 숫자를 +로 사용하는 경우
                queue.offer((new int[]{sum + numbers[index], index + 1}));
                // 다음 숫자를 -로 사용하는 경우
                queue.offer((new int[]{sum - numbers[index], index + 1}));
            }
        }
        return answer;
    }
}

제출

import java.util.*;
class Solution {
    public int solution(int[] numbers, int target) {
        return bfs(target, numbers);
    }
    private static int bfs(int target, int[] numbers) {
        int answer = 0;
        Queue<int[]> queue = new LinkedList<>(); // {sum, index} 형태
        queue.offer(new int[]{0, 0});

        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int sum = current[0];
            int index = current[1];

            if (index == numbers.length) {
                if (sum == target) answer ++;
            }
            else {
                queue.offer((new int[]{sum + numbers[index], index + 1}));
                queue.offer((new int[]{sum - numbers[index], index + 1}));
            }
        }
        return answer;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - 피로도  (0) 2025.02.17
[programmers] Java Lv.2 - 프로세스  (1) 2025.02.07
[programmers] Java Lv.2 - 기능개발  (0) 2025.01.27
[programmers] Java Lv.2 - 의상  (1) 2025.01.22
[programmers] Java Lv.2 - 할인 행사  (2) 2025.01.21
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - 피로도
  • [programmers] Java Lv.2 - 프로세스
  • [programmers] Java Lv.2 - 기능개발
  • [programmers] Java Lv.2 - 의상
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    백준
    CSS
    dp
    javascript
    HTML
    Subquery
    백트래킹
    jwt
    시뮬레이션
    프로그래머스
    jQuery
    mysql
    GROUP BY
    DFS
    bootstrap
    join
    java
    다이나믹프로그래밍
    자료구조
    Firebase
    programmers
    Google Fonts
    그리디
    완전탐색
    jpa
    BOJ
    sql
    websocket
    BFS
    greedy
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - 타겟 넘버
상단으로

티스토리툴바