티스토리 뷰

Algorithm

백준_부분수열의 합_14225

Young_J 2021. 1. 25. 23:20

// 알고리즘

 

1. 부분집합

 

2. check배열을 나올 수 있는 최대 수인 2000000 생성

 

3. 주어진 수의 부분집합을 구해 모두 더해서 check 배열에 표시

 

4. check배열을 1부터 시작하여 false인 값이 정답

더보기
import java.io.*;
import java.util.*;

public class 부분수열의합_14225 {

	static int N, arr[], ans;
	static boolean[] v;
	static boolean[] check;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		N = sc.nextInt();
		v = new boolean[N];
		check = new boolean[2000001];
		arr = new int[N];
		ans = 0;

		for (int i = 0; i < N; i++) {
			arr[i] = sc.nextInt();
		}

		cal(0);
		
		for (int i = 1; i <= 2000000; i++) {
			if(!check[i]) {
				System.out.println(i);
				break;
			}
		}

	}

	private static void cal(int idx) {
		if (idx == N) {
			
			int cnt = 0;
			for (int i = 0; i < N; i++) {
				if(v[i]) cnt+=arr[i];
			}
			
			check[cnt] = true;
			
			return;
		}

		v[idx] = true;
		cal(idx + 1);
		v[idx] = false;
		cal(idx + 1);

	}

}

※ n값이 20이라고 주어졌을 때, 부분집합의 개수가 2의 20승 이므로(백만)  부분집합으로 풀 수 있는 문제라고 생각

이후에는 그냥 쉽게 구현만 해서 정답이 나옴. 

'Algorithm' 카테고리의 다른 글

백준_돌 게임_9655  (0) 2021.01.29
백준_2048 (Easy)_12100  (0) 2021.01.28
백준_프린터 큐_1966  (0) 2021.01.24
백준_연구소_14502  (0) 2021.01.23
백준_스도미노쿠_4574  (0) 2021.01.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
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
글 보관함