https://programmers.co.kr/learn/courses/30/lessons/43165
java 코드
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
32
33
34
35
36
37
38
39
40
|
class Solution {
int answer;
public int solution(int[] numbers, int target) {
boolean[] flag = new boolean[numbers.length];
answer = 0;
// 배열의 멱집합 구하기
powerSet(numbers, flag, 0, target);
return answer;
}
public void powerSet(int[] numbers, boolean[] flag, int depth, int target) {
if (depth == numbers.length) {
int iSum = 0;
// flag값이 true면 + , flase 면 -
for (int i = 0; i < depth; i++) {
if (flag[i] == true) {
iSum += numbers[i];
} else {
iSum -= numbers[i];
}
}
if (iSum == target) {
answer++;
}
return;
}
flag[depth] = true;
powerSet(numbers, flag, depth + 1, target);
flag[depth] = false;
powerSet(numbers, flag, depth + 1, target);
}
}
Colored by Color Scripter
|
c++ 코드
#include <vector>
using namespace std;
int cnt;
void dfs(const vector<int> &numbers, int sum, int i, const int &target)
{
if (i == numbers.size())
{
if (sum == target)
{
cnt++;
}
return ;
}
dfs(numbers, sum + numbers[i], i + 1, target);
dfs(numbers, sum - numbers[i], i + 1, target);
}
int solution(vector<int> numbers, int target) {
dfs(numbers, 0, 0, target);
return cnt;
}
java코드
멱집합 구하기를 이용해서 풀었다
(멱집합 구하는데 쓰인 알고리즘을 "백트랙킹"이라고 하는 것 같다.)
백트랙킹 공부하면 다시 업뎃하겠다...
(20200508 추가)
c++코드
DFS로 풀었다.
예전에 풀었던 java코드랑 비교하니, c++코드가 훨씬 깔끔하다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]정렬 : 가장 큰 수 (level 2) (java, c++) (0) | 2019.11.05 |
---|---|
[프로그래머스]정렬 : K번째수 (level 1) (0) | 2019.11.04 |
[프로그래머스]완전탐색 : 카펫 (level 2) (java, c++) (0) | 2019.11.04 |
[프로그래머스]완전탐색 : 숫자 야구 (level 2)(java) (0) | 2019.11.03 |
[프로그래머스]완전탐색 : 소수 찾기 (level 2)(java) (0) | 2019.11.03 |
댓글