HyeLog

๋ฐฑ์ค€_14225_๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€_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;
}