일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 클라이언트 상태 관리 라이브러리
- jotai
- docker
- 암묵적 타입 변환
- Compound Component
- Custom Hook
- react
- helm-chart
- Headless 컴포넌트
- useCallback
- 좋은 PR
- JavaScript
- Microtask Queue
- 타입 단언
- TypeScript
- Sparkplug
- zustand
- useLayoutEffect
- prettier-plugin-tailwindcss
- task queue
- CS
- type assertion
- AJIT
- Redux Toolkit
- 주니어개발자
- Recoil
- 명시적 타입 변환
- 프로세스
- linux 배포판
- Render Queue
Archives
- Today
- Total
구리
[Algorithm] 프로그래머스 - 타겟 넘버 본문
[문제]
https://programmers.co.kr/learn/courses/30/lessons/43165
[설명]
각 배열의 숫자를 이용해 target 으로 결과값을 만들 수 있는 식의 개수를 구하는 방법으로 숫자들 사이에는 +,- 기호만 사용할 수 있다.
만약 a,b,c,d,e 라는 숫자가 있을 때 식으로 만들 수 있는 모든 경우의 수는 32다. (2의 5제곱)
모든 경우의 수를 구해서 해당 식의 결과가 target과 같다면 1을 반환, 아니면 0을 반환하는 함수를 만들어서 사용하였고 알고리즘은 모든 노드를 방문 할 수 있는 DFS(깊이 우선 탐색) 방법을 사용하였다.
class Solution {
public int solution(int[] numbers, int target) {
int answer = dfs(numbers,target,0,0);
return answer;
}
public int dfs(int[] numbers, int target, int depth, int sum){
// 배열의 마지막 숫자까지 계산한 경우
if(depth == numbers.length){
if(sum == target) // 결과값과 target이 같다면 카운트 해야 하므로 1을 반환
return 1;
else
return 0;
}else{
// 배열의 특정 숫자와 +,- 한 결과값을 전달하고 그 다음 숫자 차례로 넘어감
return dfs(numbers,target,depth+1,sum + numbers[depth])
+ dfs(numbers,target,depth+1,sum - numbers[depth]);
}
}
}
'혼자 공부,정리하는 알고리즘' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 오픈채팅방 (Java) (0) | 2021.10.26 |
---|---|
[Algorithm] 프로그래머스 - 문자열 압축 (Java) (0) | 2021.10.26 |
[Algorithm] 프로그래머스 - 다음 큰 숫자 (Java) (0) | 2021.10.14 |
[Algorithm] 프로그래머스 이상한 문자 만들기 (Java) (0) | 2021.10.12 |
[Algorithm] 최대공약수, 최소공배수 (0) | 2021.10.04 |