알고리즘

[프로그래머스] 타겟넘버 (파이썬)

유병각 2022. 2. 3. 21:30

문제 링크

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

 

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

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

programmers.co.kr

 

문제 풀이

이 문제는 재귀를 이용한 완전탐색으로 쉽게 해결할 수 있다.

숫자 앞에 + 나 - 둘 중 1개가 올 수 있으므로, 총 만들수 있는 경우의 수는 2^n 이다.

즉 Big(O) = 2^n 이다.

문제에서 n 의 범위가 20 이하라고 했으므로( 백만번 계산 ), 시간초과는 절대 안걸린다.

 

시간 복잡도

Big(O) = 2^n

소스 코드

cnt = 0;

def solution(numbers, target):
    n = len(numbers);
    
    
    def rec(answer, order):
        global cnt;
        if order >= len(numbers):
            if answer == target:
                cnt += 1;
            return ;
        rec(answer + numbers[order], order + 1);
        rec(answer - numbers[order], order + 1);
    
    rec(-numbers[0], 1);
    rec(numbers[0], 1);
    
    return cnt;