μ•Œκ³ λ¦¬μ¦˜

λ°±μ€€_14225_λΆ€λΆ„μˆ˜μ—΄μ˜ ν•©

shj718 2022. 5. 11. 18:06

🎈문제: https://www.acmicpc.net/problem/14225

 

14225번: λΆ€λΆ„μˆ˜μ—΄μ˜ ν•©

μˆ˜μ—΄ Sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μˆ˜μ—΄ S의 λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•©μœΌλ‘œ λ‚˜μ˜¬ 수 μ—†λŠ” κ°€μž₯ μž‘μ€ μžμ—°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 예λ₯Ό λ“€μ–΄, S = [5, 1, 2]인 κ²½μš°μ— 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 λ§Œλ“€

www.acmicpc.net

 

πŸŽˆμ•Œκ³ λ¦¬μ¦˜: 브루트포슀 - λΉ„νŠΈλ§ˆμŠ€ν¬

 

πŸŽˆλΆ€λΆ„μˆ˜μ—΄ κ°œλ…) λΆ€λΆ„ μˆ˜μ—΄μ€ μ›λž˜ μˆ˜μ—΄μ˜ μˆœμ„œλ₯Ό λ°”κΏ€ 수 μ—†λ‹€.

예λ₯Ό λ“€μ–΄, μˆ˜μ—΄ S={1,2,5}의 λΆ€λΆ„μˆ˜μ—΄μ€ {},{1},{2},{5},{1,2},{1,5},{2,5},{1,2,5} 이닀. ({5,2} 등은 λΆ€λΆ„μˆ˜μ—΄μ΄ μ•„λ‹ˆλ‹€!)

 

πŸŽˆλΆ€λΆ„μˆ˜μ—΄μ„ λ§Œλ“œλŠ” 방법)

1. μž¬κ·€ 호좜

2. λΉ„νŠΈλ§ˆμŠ€ν¬ (πŸ‘‰μ΄λ²ˆμ—λŠ” λΉ„νŠΈλ§ˆμŠ€ν¬λ‘œ ν’€μ–΄λ³΄μ•˜λ‹€.)

 

πŸŽˆμ•„μ΄λ””μ–΄: ν•΄λ‹Ή μˆ«μžκ°€ λΆ€λΆ„μˆ˜μ—΄μ˜ ν•©μœΌλ‘œ λ‚˜μ˜¨μ μ΄ 있으면 check 배열에 trueλ₯Ό μ €μž₯

 

πŸŽˆμ½”λ“œ:

#include <iostream>
#include <vector>
#define MAX (20*100000+1)
using namespace std;

bool check[MAX];

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int N;
	cin >> N;
	vector<int> s(N);
	for (int i = 0; i < N; i++) {
		cin >> s[i];
	}
	for (int i = 0; i < (1 << N); i++) {
		int sum = 0;
		for (int j = 0; j < N; j++) {
			if ((i & (1 << j)) != 0) {
				sum += s[N - 1 - j];
			}
		}
		check[sum] = true;
	}
	for (int i = 1;; i++) {
		if (check[i] == false) {
			cout << i << '\n';
			break;
		}
	}
	return 0;
}