[프로그래머스] 타겟넘버 문제 풀이 (BFS)

2025. 3. 17. 23:55·Algorithm

문제 소개

오늘 풀었던 프로그래머스 타겟 넘버 문제를 정리합니다. 오랜만에 다시 알고리즘 풀이를 시작했습니다. 다시 매일 화이팅~!

주어진 숫자 배열에서 각 숫자에 + 또는 -를 붙여서 원하는 타겟 넘버를 만들 수 있는 경우의 수를 구하는 문제입니다.

문제 링크: 타겟 넘버 - 프로그래머스


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 이 문제는 모든 경우의 수를 탐색해야 하므로 완전 탐색(Brute Force) 방식이 적절합니다.
  2. 각 숫자에 + 또는 -를 붙이는 모든 조합을 탐색해야 하므로, DFS(백트래킹) 또는 BFS를 활용할 수 있습니다.

해결 과정 및 코드

핵심 아이디어

  1. 각 숫자에 대해 +와 -를 적용한 경우를 탐색
  2. 탐색이 끝났을 때 목표 값(target)과 동일한 경우 answer 증가

코드

시간 복잡도 : N이 최대 20이므로 최대 탐색 횟수는 2^20 ≈ 1,000,000 → 브루트포스 탐색 가능

import java.util.*;

class Solution {
    static int answer = 0;
    public int solution(int[] numbers, int target) {
        bfs(numbers, 0, target, new boolean [numbers.length]);
        return answer;
    }
    
    public void bfs(int[] numbers, int idx, int target, boolean [] minus){
        if (idx >= numbers.length){
            int sum = 0;
            for (int i = 0; i < numbers.length; i++){
                if (minus[i]) sum -= numbers[i];
                else sum += numbers[i];
            }
            if (target == sum) answer++;
            return ;
        }
        minus[idx] = true;
        bfs (numbers, idx+1, target, minus);
        minus[idx] = false;
        bfs (numbers, idx+1, target, minus);
    }
}

 

또한 minus를 통해 +,- 기록하고 마지막에 검사할 수 있지만, 아래 다른 분들 풀이처럼 그냥 바로 계산할 수 있습니다.

class Solution {
    public int solution(int[] numbers, int target) {
        int answer = 0;
        answer = dfs(numbers, 0, 0, target);
        return answer;
    }
    int dfs(int[] numbers, int n, int sum, int target) {
        if(n == numbers.length) {
            if(sum == target) {
                return 1;
            }
            return 0;
        }
        return dfs(numbers, n + 1, sum + numbers[n], target) + dfs(numbers, n + 1, sum - numbers[n], target);
    }
}

'Algorithm' 카테고리의 다른 글

[프로그래머스] 가장 큰 수 풀이 (정렬)  (0) 2025.04.26
[프로그래머스] K번째 수 풀이 (정렬)  (0) 2025.04.26
[프로그래머스] 완주하지 못한 선수 풀이 (Hash)  (0) 2025.04.26
[프로그래머스] N으로 표현 풀이 (DP)  (0) 2025.04.26
[백준] 15684 - 사다리 조작 문제 풀이 (백트래킹)  (0) 2025.03.14
'Algorithm' 카테고리의 다른 글
  • [프로그래머스] K번째 수 풀이 (정렬)
  • [프로그래머스] 완주하지 못한 선수 풀이 (Hash)
  • [프로그래머스] N으로 표현 풀이 (DP)
  • [백준] 15684 - 사다리 조작 문제 풀이 (백트래킹)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    백준
    Level3
    boostcamp
    Level2
    Kotlin
    프로그래머스
    코테
    알고리즘고득점kit
    java
    greedy
    시뮬레이션
    문법정리
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 타겟넘버 문제 풀이 (BFS)
상단으로

티스토리툴바