정리
프로그래머스: 타겟 넘버(Level 2) 본문
프로그래머스: 타겟 넘버(Level 2)
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수
programmers.co.kr
문제 설명
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
풀이 방법
dfs를 활용해서 풀었다.
이전까지 값에 '+' 혹은 '-'를 했을 때의 값을 계속해서 전달해 나가면서 풀었다.
dfs의 종료 조건은 numbers 배열의 마지막 인덱스에 도착했을 때이다.
numbers 배열의 순서를 조작하면 안 되기 때문에 조기조건을 사용하여 dfs를 탈출하는 경우도 없다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
signs = ['+', '-'] | |
answer = 0 | |
def dfs(numbers, target, curr_num, curr_idx): | |
global signs, answer | |
if curr_idx == len(numbers): | |
if curr_num == target: | |
answer += 1 | |
return | |
for sign in signs: | |
if sign == '+': | |
dfs(numbers, target, curr_num + numbers[curr_idx], curr_idx + 1) | |
else: | |
dfs(numbers, target, curr_num - numbers[curr_idx], curr_idx + 1) | |
def solution(numbers, target): | |
global answer | |
dfs(numbers, target, 0, 0) | |
return answer |
'Programming > 프로그래머스' 카테고리의 다른 글
프로그래머스: 가장 긴 팰린드롬(Level 3) (0) | 2022.02.05 |
---|---|
프로그래머스: 정수 삼각형(Level 3) (0) | 2022.02.02 |
프로그래머스: 가장 먼 노드(Level 3) (0) | 2022.02.01 |
프로그래머스: 순위 검색(Level 2) (0) | 2022.01.31 |
프로그래머스: 소수 찾기(Level 2) (0) | 2021.02.12 |
Comments