알고리즘/프로그래머스

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

me1 2020. 7. 16. 18:18

문제 설명


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

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3 
+1+1-1+1+1 = 3 
+1+1+1-1+1 = 3 
+1+1+1+1-1 = 3

사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

 

제한조건

 

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

 

 

입출력 예

 

numbers target return
[1, 1, 1, 1, 1] 3 5

 

나의 풀이

 

def solution(numbers, target):
    a=[0]
    for i in numbers:
        b=[]
        for j in a: 
            b.append(j+i)
            b.append(j-i)
        a=b
    return a.count(target)

1. 각각의 수를 더하는 경우와 빼는 경우를 리스트 b에 넣습니다.
2. 리스트 b의 값을 리스트 a에 넣습니다.
3. numbers에 대한 모든 경우를 계산하고 target과 값이 같은 개수를 리턴합니다.

 


프로그래머스 '타겟 넘버' : 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