Algorithm/programmers/DFS, BFS/타겟 넘버 (with python)

yellow·2021년 6월 10일
0

알고리즘 문제

목록 보기
34/58

📖문제

📝풀이과정

  • target에서 n개의 수를 적절히 더하거나 빼서 0으로 만드는 방식으로 문제를 풀었다.
  • 전체 경우를 모두 확인할 때 DFS를 활용했다.
    리프노드까지 계산을 했을 때 0이 된다면 answer을 +1해준다.

⌨코드

def dfs(numbers, index, tmp):
    global answer
    
    # 리프 노드인 경우
    if index == len(numbers):
        if tmp == 0:
            answer += 1
        return
    
    # 현재 index의 숫자를 빼는 경우
    dfs(numbers, index+1, tmp - numbers[index])
    # 현재 index의 숫자를 더하는 경우
    dfs(numbers, index+1, tmp + numbers[index])
        

answer = 0
def solution(numbers, target):
    global answer
    dfs(numbers, 0, target)
    return answer

⌨ 다른 분의 코드

  • target에서 적절히 더하거나 빼서 0으로 만드는 아이디어는 같다.
  • 따로 dfs 함수를 두지 않고 solution 자체를 재귀하셨다.
def solution(numbers, target):
    # 리스트 numbers가 비어있고 target이 0이 됐다면
    if not numbers and target == 0 :
        # answer에 1을 더하는 경우와 같음
        return 1
    # 리스트 numbers가 비었지만 target이 0이 아닌 경우
    elif not numbers:
        return 0
    # 리스트 numbers가 비어있지 않은 경우(피연산자가 더 남아있을 경우)
    else:
        return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])

💡새로 알게된 문법

리스트가 비었는지 확인할 때 쓰는 'not'

# 리스트 not이 비어있으면 0을 리턴해라
if not numbers :
    return 0
profile
할 수 있어! :)

0개의 댓글