반응형
728x90
반응형
문제
https://www.acmicpc.net/problem/14225
풀이코드
package seohae.algorithm.level2;
import java.io.IOException;
import java.util.*;
import java.util.stream.IntStream;
/**
* https://www.acmicpc.net/problem/14225
*/
public class Problem_014_14225 {
static int N;
static int S;
static int[] arr;
static Set<Integer> sumSet = new HashSet<>();
static boolean[] visited;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String param = sc.nextLine();
N = Integer.parseInt(param.split(" ")[0]);
arr = new int[N];
visited = new boolean[N];
/* 집합 S */
String S = sc.nextLine();
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(S.split(" ")[i]);
}
dfs(0); /* dfs 호출 */
List<Integer> sumList = new ArrayList<>(sumSet);
Collections.sort(sumList); /* 정렬 */
/* 1,2,3,4 순서일시 5를 담기 위한 설정 */
int answer = sumList.get(sumList.size() - 1) + 1;
/* 1보다 큰 수부터 시작일땐 무조건 1 설정 */
int beforeVal = sumList.get(0);
if (beforeVal > 1) {
answer = 1;
} else {
/* answer 셋팅 */
for (int i = 1; i < sumList.size(); i++) {
if (beforeVal + 1 != sumList.get(i)) {
answer = beforeVal + 1;
break;
}
beforeVal = sumList.get(i);
}
}
System.out.println(answer);
}
static void dfs(int value) {
int sum = 0;
for (int i = 0; i < N; i++) {
if (visited[i]) { /* true 일 경우 */
sum += arr[i];
/* Set으로 설정하여 중복값 제거 */
sumSet.add(sum);
}
}
/* 재귀함수 */
for (int j = value; j < N; j++) {
visited[j] = true;
dfs(j + 1);
visited[j] = false;
}
}
}
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[프로그래머스] Level3 12938번: 최고의 집합 (JAVA) (0) | 2021.09.30 |
---|---|
[프로그래머스] Level2 _43165번: 타겟 넘버 (JAVA) (0) | 2021.09.29 |
[Baekjoon 1182번] 부분수열의 합 문제 (with 자바) (0) | 2021.09.26 |
[프로그래머스] Level2 _1829번: 카카오 프렌즈 컬러링북 (JAVA) (0) | 2021.09.25 |
[프로그래머스] Level2 _42888번: 오픈채팅방 (JAVA) (0) | 2021.09.24 |