반응형

출처 : 프로그래머스

 

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

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

programmers.co.kr

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 이하인 자연수입니다.

입출력 예

numberstargetreturn

[1, 1, 1, 1, 1] 3 5
[4, 1, 2, 1] 4 2

입출력 예 설명

입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

+4+1-2+1 = 4
+4-1+2-1 = 4
  • 총 2가지 방법이 있으므로, 2를 return 합니다.

1. bfs, dfs문제이다. bfs는 인접노드 옆 부터 하나씩 dfs는 끝까지 가고 다시 나온다.

bfs, dfs로 풀려고 하여서 다른 사람 참조하였다.

answer = 0
# 깊이 까지 더해준다. 
def dfs(index, val, len_, numbers, target):
    global answer
    if index == len_:
        if val == target:
            answer+= 1
        return answer
    for i in [1, -1]:
        dfs(index + 1, val + (numbers[index])* i, len_, numbers, target)

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


numbers = [1, 1, 1, 1, 1]
target = 3
solution(numbers, target)

 

참조 : 

https://codermun-log.tistory.com/298

 

BFS/DFS_타겟 넘버_python

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

codermun-log.tistory.com

 

반응형

'문제 > 프로그래머스' 카테고리의 다른 글

중성화 여부 파악하기  (0) 2022.02.16
점프와 순간 이동  (0) 2022.02.16
괄호 변환  (0) 2022.02.04
빛의 경로 사이클  (0) 2022.02.02
NULL 처리하기  (0) 2022.01.26

+ Recent posts