n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
이 문제는 유망한지를 판단해서 시간을 줄일 수 있을거라고 처음에 생각했지만 더하기 빼기로 인하여 마지막까지 어떠한 숫자가 나올수 있을지 알 수 없기 때문에 모든 경우의 수를 탐색하여야 했다.
class Solution {
public int solution(int[] numbers, int target) {
int answer = 0;
answer = bfs(numbers, target, numbers[0], 1) + bfs(numbers, target, -numbers[0], 1);
return answer;
}
public int bfs(int[] numbers, int target, int sum, int i) {
if(i == numbers.length) {
if(sum == target) {
return 1;
} else {
return 0;
}
}
int result = 0;
result += bfs(numbers, target, sum+numbers[i], i+1);
result += bfs(numbers, target, sum-numbers[i], i+1);
return result;
}
}
재귀 함수 호출을 이용하여 bfs를 사용하였는데 매개변수로 numbers 배열과 target 숫자, 그리고 현재까지의 값 sum, 다음 인덱스 i를 받았다.
처음 bfs 함수를 호출할 때 numbers의 0번째 숫자와 다음인덱스 1을 넣어준 것이다. 그렇게 계속해서 number.length-1의 인덱스까지 모두 탐색하고 마지막으로 호출 시 인덱스 i가 numbers.length와 같게 된다면 리프노드까지 탐색을 모두 한것이기 때문에 target 숫자와 같은지 확인하고 같으면 1을 반환 아니면 0을 반환하여 카운트를 하게된다.
그래 그리 쉽지는 않겠지
나를 허락해준 세상이란
손쉽게 다가오는 편하고도 감미로운 공간이 아냐
그래도 날아오를 거야
작은 날개짓에 꿈을 담아
조금만 기다려 봐
Oh my~
그래 그리 쉽지는 않겠지
나를 허락해준 세상이란
손쉽게 다가오는 편하고도 감미로운 공간이 아냐
그래도 날아오를 거야
작은 날개짓에 꿈을 담아
조금만 기다려 봐
Oh my love