Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • github
  • Stack
  • 파이썬
  • hash
  • MVC
  • 해시
  • 인프런
  • BFS
  • 문자열
  • 면접을 위한 CS 전공지식 노트
  • 알고리즘
  • java
  • sql
  • 자료구조
  • 주간 학습 계획
  • EC2
  • 프로그래머스
  • GIT
  • AWS
  • MySQL
  • 이분탐색
  • JSP
  • 재귀
  • 백준
  • 정렬
  • 완전탐색
  • JPA
  • 자바
  • dfs
  • 이코테

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

자바(Java) 알고리즘 문제풀이 타겟넘버 [프로그래머스 / DFS]
DFS BFS

자바(Java) 알고리즘 문제풀이 타겟넘버 [프로그래머스 / DFS]

2022. 11. 23. 21:13

출처) 프로그래머스 Facebook

 

 

 

문제 설명

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 target return
[1, 1, 1, 1, 1] 3 5
[4, 1, 2, 1] 4 2

 

 

풀이 코드

자주 나오는 DFS 깊이 우선 탐색 활용 문제 !

문제에서 배열을 옮기지 않는 상태로 적절히 덧셈, 뺄셈 연산을 한다고 했으므로, 2가지의 경우를 생각하면 된다.

depth 는 말 그대로 깊이를 뜻하는 변순데, numbers 배열의 길이가 노드 갯수라고 생각해서 if 분기 조건으로 아래와 같은 조건이 들어가게 됐다. 깊이있게 파고들면서 누적되는 sum 변수 값과 target 이 일치될 때, count 변수를 증가시키면 끝.

import java.util.Arrays;

class Solution {
    static int count;
    static int sTarget;
    static int[] sNumbers;

    public int solution(int[] numbers, int target) {
        sNumbers = numbers.clone();
        sTarget = target;

        dfs(0, 0);

        return count;
    }

    private static void dfs(int depth, int sum) {
        if (depth == sNumbers.length) {
            if (sum == sTarget) {
                count++;
            }

        } else {
            dfs(depth + 1, sum + sNumbers[depth]);
            dfs(depth + 1, sum - sNumbers[depth]);
        }
    }
}

'DFS BFS' 카테고리의 다른 글

자바(Java) 알고리즘 문제풀이 여행경로 [프로그래머스 / DFS]  (0) 2022.11.24
자바(Java) 알고리즘 문제풀이 네트워크 [프로그래머스 / DFS]  (0) 2022.11.23
자바(Java) 알고리즘 문제풀이 가장 먼 노드 찾기 [프로그래머스 / BFS]  (0) 2022.11.22
자바(Java) 알고리즘 문제풀이 미로탈출 [이코테 / BFS]  (0) 2022.10.09
자바(Java) 알고리즘 문제풀이 음료수 얼려먹기 [이코테 / DFS]  (0) 2022.10.09
    'DFS BFS' 카테고리의 다른 글
    • 자바(Java) 알고리즘 문제풀이 여행경로 [프로그래머스 / DFS]
    • 자바(Java) 알고리즘 문제풀이 네트워크 [프로그래머스 / DFS]
    • 자바(Java) 알고리즘 문제풀이 가장 먼 노드 찾기 [프로그래머스 / BFS]
    • 자바(Java) 알고리즘 문제풀이 미로탈출 [이코테 / BFS]
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바