본문 바로가기

알고리즘/프로그래머스

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

문제링크 : 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

알고리즘을 쉰지 4달이 넘었다. 4달 전에 뭐라도 포스팅 해보려고 블로그를 만들었는데 아무것도 안하다가 최근 자극을 받고 파이썬으로 처음 풀어봤다. 들여쓰기가 익숙하지 않고 문법도 아직 잘 모르지만 알고리즘 문제를 푸는데는 문제 없이 금방 적응할 것 같다. 그래도 비교적 쉬운 레벨2번부터 풀어보았다. 

 

이 게시글을 시작으로 알고리즘을 꾸준히 할 생각이다.

 

아직 언어가 익숙하지 않아서 문제를 푼 후 다른 사람코드를 봤더니 역시나 내 코드는 간결하지 못했다.

global N 
N = 0 
global answer 
answer = 0 
def dfs(numbers,target,cnt,sum): 
    global answer 
    global N 
    if(cnt == N): 
        if(target == sum): 
            answer +=1 
        return 
    dfs(numbers,target,cnt+1,numbers[cnt]+sum) 
    dfs(numbers,target,cnt+1,-numbers[cnt]+sum) 

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