본문 바로가기

Problem Solving/programmers

[programmers] Level 2 타겟 넘버.py

728x90
반응형

프로그래머스 Level 2 타켓 넘버를 파이썬을 통해 풀어보았다. 

 

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

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

타겟 넘버.py

 

tomy9729/Algorithm

🐗 내가 직접 작성한 내 코드 🐗. Contribute to tomy9729/Algorithm development by creating an account on GitHub.

github.com


Level 2 - 타겟 넘버

DFS로 해결할 수 있는 문제이다. 각 단계들을 탐색하며 한번은 더해주고 한번은 빼준다. 마지막 단계까지 왔을 때 target 값과 같다면 answer을 하나 증가시킨다.

 

DFS로 분류되어 있는 문제라 굳이 DFS로 풀어봤지만 재귀 함수나 DP로도 풀 수 있을 듯 하다.

#Level 2 타겟 넘버.py
def solution(numbers, target):
    answer = 0
    def DFS(num, level) : 
        nonlocal answer
        if level == len(numbers) :
            if num == target : 
                answer += 1
            return
        if level == 1 : 
            DFS(num+numbers[level],level+1)
            DFS(num-numbers[level],level+1)
            DFS(-1*num+numbers[level],level+1)
            DFS(-1*num-numbers[level],level+1)
        else :
            DFS(num+numbers[level],level+1)
            DFS(num-numbers[level],level+1)
    DFS(numbers[0],1)
    return answer

 

 

728x90
반응형