티스토리 뷰
타겟 넘버
- 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 이하인 자연수입니다.
내 풀이
- DFS - JavaScript
function solution(numbers, target) {
let answer = 0;
let sum = 0;
let cnt = 0; // target을 만드는데 성공한 가지 수 저장 변수
// DFS 시작
function DFS(L, sum){
if (L === numbers.length) { // 만약 Level이 0 ~ numbers.length - 1 이후일 때.
if (sum === target){ // sum과 target이 같다면 가지 수 +1
cnt++;
}
}else {
// 이진트리 부모에서 numbers[L]을 더해주는 왼쪽 자식 생성
// index엔 L을 넣어준다. for문 써야되는 순열이나 조합이랑 구별 잘하기.
DFS(L+1, sum + numbers[L]);
// 루트 노드에서 number[L] 만큼의 값을 빼서 오른쪽 자식 노드 생성
DFS(L+1, sum - numbers[L]);
// 이후에 이진 트리에서 if문에 설정한 L까지 모든 조건을 탐색한다.
}
}
// Level은 0부터 시작, 타겟넘버와 비교를 위한 sum을 0으로 입력
DFS(0, 0);
answer = cnt;
return answer;
}
- DFS - JAVA
class Solution {
int answer = 0;
public int solution(int[] numbers, int target) {
DFS(0,0,numbers,target);
return answer;
}
private void DFS(int L, int sum, int[] numbers, int target)
{
if (L == numbers.length)
{
if (sum == target)
{
answer++;
return ;
}
}
else
{
int temp;
temp = sum + numbers[L];
DFS(L + 1, temp, numbers, target);
temp = sum - numbers[L];
DFS(L + 1, temp, numbers, target);
}
}
}
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스]크레인 인형 뽑기(Java) - 2019 카카오개발자 겨울인턴십 (0) | 2021.07.13 |
---|---|
[프로그래머스] 키패드 누르기(Java) - 2020 카카오 인턴십 코딩테스트 (4) | 2021.07.13 |
[프로그래머스] 신규 아이디 추천(Java) - 2021 카카오 코딩테스트 (0) | 2021.07.11 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프로그래머스 카카오
- 프로그래머스 코테
- 백준
- flexbox
- React
- 42seoul
- HEXO
- c언어알고리즘
- 자바스크립트
- JS
- JavaScript
- C언어
- git vi
- 마크다운 이미지 업로드
- 알고리즘
- Git
- vscode commit vi
- 42서울 합격
- windows 10 ubuntu
- html
- 42서울
- c언어 함수
- 42서울 라피신
- 프로그래머스 코딩테스트
- 42서울 합격 후기
- C언어문제
- 프로그래머스 자바
- css
- vscode
- C언어 문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함