[Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)

2021. 7. 18. 14:04·Programming/Algorithm

문제 설명

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

 

해결 방법

1. 이진 트리의 형태로 구성될 수 있고, 모든 노드를 말단까지 탐색 한 후 target에 만족하는 값이 되는지를 검사해야한다.

따라서 BFS를 사용했다. (DFS도 사용 가능)

2. 다음에 계산할 값을 각각 +, -하고 2개의 노드를 생성해 queue에 담아준다.

 

 

해결 코드

from collections import deque

def solution(numbers, target):
    answer = 0
    queue = deque() #queue 생성
    
    length = len(numbers)
    queue.append([-numbers[0], 0])
    queue.append([+numbers[0], 0])
    
    while queue :
        num, i = queue.popleft()
        if i+1 == length :
            if num == target : answer += 1
        else :
            queue.append([num - numbers[i + 1], i + 1])
            queue.append([num + numbers[i + 1], i + 1])
    
    return answer

 

저작자표시 비영리 변경금지 (새창열림)

'Programming > Algorithm' 카테고리의 다른 글

[Python/알고리즘] DFS : 여행경로 (프로그래머스)  (0) 2021.07.18
[Python/알고리즘] DFS : 네트워크 (프로그래머스)  (0) 2021.07.18
[Python/알고리즘] BFS : 단어변환 (프로그래머스)  (2) 2021.07.18
[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)  (0) 2021.06.26
[Python/알고리즘] 힙 : 디스크 컨트롤러 (프로그래머스)  (0) 2021.06.03
'Programming/Algorithm' 카테고리의 다른 글
  • [Python/알고리즘] DFS : 여행경로 (프로그래머스)
  • [Python/알고리즘] DFS : 네트워크 (프로그래머스)
  • [Python/알고리즘] BFS : 단어변환 (프로그래머스)
  • [Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)
코딩으로세계정복
코딩으로세계정복
Connecting the dots
  • 코딩으로세계정복
    코딩으로 세계정복
    코딩으로세계정복
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JavaScript
    Python
    HTML
    useState
    Firebase
    JSON
    react
    DP
    Lingory
    CSS
    파이썬
    TypeScript
    Redux
    useRef
    flutter web
    map
    링고리
    포트폴리오
    탐욕법
    리액트
    DART
    자바스크립트
    github
    useTranslation
    플러터 웹
    프로그래머스
    플러터
    웹
    알고리즘
    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩으로세계정복
[Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)
상단으로

티스토리툴바