[프로그래머스] 타겟 넘버

김영현·5일 전
0

프로그래머스

목록 보기
27/29
post-thumbnail

🌭 문제 설명

  • n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
  • 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

🍗 제한 사항

  • 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
  • 각 숫자는 1 이상 50 이하인 자연수입니다.
  • 타겟 넘버는 1 이상 1000 이하인 자연수입니다.

🎁 입출력 예시

  • 예제 #1
    문제 예시와 같습니다.

  • 예제 #2


😎 나의 풀이

def solution(numbers, target):
    global answer
    answer = 0 # answer에 값 저장

    def dfs(i, total): # dfs 
      global answer
      if i == len(numbers): # i와 numbers의 길이가 같으면 모든 숫자를 다봄
        if total == target: # target 값과 total이 같으면
          answer += 1 # 정답한개 추가
        return
      
      dfs(i + 1, total + numbers[i]) # 더하는 경우
      dfs(i + 1, total - numbers[i]) # 빼는 경우
      return 
    
    dfs(0,0) # dfs 시작 (0,0) 부터
    return answer # answer 출력
  1. dfs를 이용한 풀이다.
  2. dfs를 통해 더하는 경우와 빼는 경우 둘다 dfs를 수행한다.
  3. inumbers의 길이가 같은 경우면 모든 숫자를 다 본 것이기 때문에 total값과 target의 값이 같으면 answer에 1씩 추가해준다.
  4. dfs(0,0)으로 dfs를 시작해준다.
  5. answer를 리턴하면 된다.

  • dfs를 이용한 더하는 경우와 빼는 경우를 전부 구하는 것이 핵심인거같다.
profile
학생의 자세로 살아가는 개발자

0개의 댓글