Coding Test/Python
[프로그래머스] 타겟 넘버 (level2, python)
lim.dev
2024. 1. 16. 18:42
https://school.programmers.co.kr/learn/courses/30/lessons/43165
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
DFS를 사용해서 풀었다. +와 - 두 가지 경우 밖에 없기 때문에 dfs(+했을 경우), dfs(-했을 경우) 이렇게 호출해주었다.
종료조건은 numbers에 값이 없을 때 타겟과 같으면 global answer을 하나 키워주고 return하고, 아니면 그냥 return 하도록 하였다.
함수를 작성할 때 i로 depth를 넘겨줄지(golbal로 numbers 리스트를 받고), numbers를 넘겨줄 지 고민했는데 직관적으로 작성하기 위해(효율성 테스트가 없어서 될 것 같았다) numbers를 넘겨주었다. (pop을 하기 때문에 deepcopy 필수!)
전체 코드
import copy
answer = 0
def solution(numbers, target):
def dfs(now, numbers, target):
global answer
if len(numbers) == 0:
if now == target: answer += 1
return
tmp_numbers = copy.deepcopy(numbers)
tmp = tmp_numbers.pop(0)
dfs(now + tmp, tmp_numbers, target)
dfs(now - tmp, tmp_numbers, target)
dfs(0, numbers, target)
return answer