코테 준비/프로그래머스

[level 2] 타겟넘버

쿠쿠*_* 2023. 9. 30. 17:41

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#bfs
def solution(numbers,target):
    sup=[0]
    cnt=0
    for n in numbers:
        temp=[]
        for i in sup:
            temp.append(i+n)
            temp.append(i-n)
        sup=temp
    return sup.count(target)
#dfs
def dfs(numbers, target, idx, values):     # idx : 깊이 / values : 더하고 뺄 특정 leaf 값 
	
    global cnt
    cnt = 0 
	
    # 깊이가 끝까지 닿았으면 
    if idx == len(numbers) & values == target : 
    	cnt += 1
        return 
  
    # 끝까지 탐색했는데 sum이 target과 다르다면 그냥 넘어간다
    elif idx == len(numbers) : 
    	return 
    
    # 재귀함수로 구현 
    dfs(numbers, target, idx+1, values + numbers[idx])   # 새로운 value 값 세팅   
    dfs(numbers, target, idx+1, values - numbers[idx])
 
 def solution(numbers, target) : 
 	
    global cnt
    dfs(numbers, target, 0, 0)
    
    return cnt

핵심포인트

가장 main idea는 +, - 부호에 따른 각 숫자에서 2가지 경우의 수가 생산된다는 것이다. 따라서 numbers의 각 숫자에 따라 2가지 경우로 자손을 뻗을 수 있게되고, 모든 경우의 수를 탐색하는 bfs/dfs 문제가 된다.

 

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[level 2] 단어변환  (0) 2023.11.05
[level 2] 네트워크  (0) 2023.09.30
[SQL_JOIN]  (0) 2023.06.13
[SQL_IS NULL]  (0) 2023.06.13
[SQL_GROUP BY]  (0) 2023.06.12