새소식

반응형
Algotithms

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

  • -
728x90
반응형

문제

  • N개의 양수를 순서를 바꾸지 않고 더하거나 빼서 타겟 넘버 만들 수 있는 경우의 수 구하기
    • 2 <= N <= 20
    • 1 <= 각 숫자 <= 50
    • 1 <= 타깃 넘버 <= 1000

 

풀이

  • 덧셈, 뺄셈 2개 경우에 대해 최대 20개 숫자가 있으므로 전체 경우의 수를 확인한다면 $O(2^20)$ 으로 충분하다
  • DFS 이용해서 전체 경우에 대해 타깃 넘버 만들 수 있는지 확인하기!

 

answer = 0
def solution(numbers, target):
    def dfs(depth, numbers, now):
        global answer
        if depth == 0 :			# 모든 숫자 사용했고,
            if now == target:	# 타깃 넘버 만들 수 있으면
                answer += 1		# 정답 +1
            return
        dfs(depth-1, numbers[1:], now+numbers[0])	# 현재 기호 +
        dfs(depth-1, numbers[1:], now-numbers[0])	# 현재 기호 -
        
    dfs(len(numbers), numbers, 0)
    return answer

 

 

 

References

  • 프로그래머스 고득점 Kit DFS/BFS
반응형

'Algotithms' 카테고리의 다른 글

[프로그래머스] 게임 맵 최단거리  (1) 2023.05.12
[프로그래머스] 네트워크  (0) 2023.05.12
[백준] 2503 숫자 야구  (0) 2023.05.12
[프로그래머스] 미로 탈출 명령어  (0) 2023.05.10
[백준] 20002 사과나무  (0) 2023.05.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.