[프로그래머스]43165: 타겟 넘버 | DFS

2024. 10. 14. 19:53·코딩테스트/프로그래머스

 

[프로그래머스]43165번 타겟 넘버 - DFS

 

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

 

프로그래머스

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

programmers.co.kr

 

 


[python]문제 풀이

DFS + 재귀함

 

1. 배열 numbers와 목표 값 target을 인자로 받기 , 여기서 주어진 숫자들을 더하거나 빼서 target 값을 만들 수 있는 방법을 찾는 것!!!

 

2. idx와 현재까지의 합(result)을 매개변수로 받고 , idx위치의 숫자를 더하거나 빼는 방법을 둘다 탐색

 

 

3. idx == len(numbers) -> 인덱스가 numbers의 길이에 도달했을 때  = 모두 탐색했을 때 

 result과 target이 같으면 1(성공)을 반환 / 아니면 0(실패)를 반환

 

4. 재귀 호출 : 현재 숫자를 더한 경우 (result+numbers[idx]) / 현재 숫자를 뺀 경우 (result-numbers[idx])

 

 

def solution(numbers, target):
    answer = 0
    def dfs(idx, result):
        if idx == len(numbers) :  # 인덱스가 numbers의 길이에 도달했을 때  = 모두 탐색했을 때 
            if result == target:  # 현재 합계가 타겟과 같으면 1을 반환
                nonlocal answer
                answer += 1
            return
        else:  # 현재 숫자를 더한 경우와 뺀 경우를 각각 탐색
            dfs(idx+1, result+numbers[idx])
            dfs(idx+1, result-numbers[idx])
    dfs(0,0)      # 처음 재귀 호출 (0번째 인덱스부터 시작, 초기 합은 0)
    return answer

 

 

** nonlocal 키워드는 Python에서 중첩된 함수에서 사용. 특정 변수에 대해 외부 함수(또는 상위 함수)의 변수를 참조하거나 수정할 때 사용

 

** nonlocal answer는 중첩 함수인 dfs가 상위 함수 solution에 선언된 answer 변수를 수정할 수 있도록 하는 역할

 

-> nonlocal을 사용하지 않고 answer += 1을 수행하려고 하면, dfs 내부에서 새로운 지역 변수가 만들어지기 때문에 상위 함수의 answer 값에 영향을 미치지 않게 됨........

 

즉, nonlocal은 dfs 함수 내에서 상위 함수의 answer 변수에 접근하여, 그 값을 업데이트할수있음

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

[프로그래머스]67258 : 보석 쇼핑 | 투포인트 탐색  (1) 2024.10.28
[프로그래머스]150368: 이모티콘 할인 행사 | DFS  (2) 2024.10.21
[프로그래머스] 1154539 : Lv2 뒤에 있는 큰 수 찾기| 스택  (0) 2024.09.23
[프로그래머스] 12921번 : Lv1 소수 찾기 | 에라토스테네스의 체  (0) 2024.09.15
[프로그래머스]86491번 최소직사각형 | 완전 탐색  (1) 2024.09.12
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스]67258 : 보석 쇼핑 | 투포인트 탐색
  • [프로그래머스]150368: 이모티콘 할인 행사 | DFS
  • [프로그래머스] 1154539 : Lv2 뒤에 있는 큰 수 찾기| 스택
  • [프로그래머스] 12921번 : Lv1 소수 찾기 | 에라토스테네스의 체
#코딩 공부
#코딩 공부
tildacoding 코딩 공부
  • #코딩 공부
    tildacoding
    #코딩 공부
  • 전체
    오늘
    어제
  • 글쓰기 관리자
  • Personal

    • 홈
    • 태그
    • 방명록
  • link

    • GITHUB
    • 분류 전체보기 (51)
      • Dev (12)
        • python (0)
        • 웹크롤링 (2)
        • 머신러닝 (3)
        • 딥러닝 (4)
        • 언어지능 딥러닝 (2)
        • SQL (1)
        • Spring (0)
      • 코딩테스트 (16)
        • 백준 (3)
        • 프로그래머스 (7)
        • 기타 문제 (2)
        • 코딩테스트를 위한 정리 (4)
      • Study (4)
        • 알고리즘 (2)
        • 자료구조 (2)
      • 대외활동 (18)
        • 에이블스쿨 (18)
        • 공모전 (0)
  • 공지사항

    • 루틴 skrrrrr
  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
#코딩 공부
[프로그래머스]43165: 타겟 넘버 | DFS
상단으로

티스토리툴바