강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Kyungbin Ryu님의 프로필 이미지
Kyungbin Ryu

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

60. 합이 같은 부분 집합 (아마존 인터뷰 문제 : DFS 완전탐색)

이러한 문제에 도달했을때 즉시 종료할수있다면 하는것이 좋을까요?

작성

·

230

0

#include <stdio.h>
#include <algorithm>
using namespace std;
int n, i, arr[11], total=0;
bool flag = false;

void DFS(int level, int sum){
	if(sum > total/2){
		return;
	}
	if(level == n+1){
		if(sum == (total-sum)){
			flag = true;
			return;
		}
	} else {
		DFS(level+1, sum+arr[level]);
		DFS(level+1, sum);
	}
}

int main(){
	//freopen("input.txt", "rt", stdin);
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		scanf("%d", &arr[i]);
		total += arr[i];
	}
	if(total%2 == 1){
		printf("NO");
		return 0;
	}
	DFS(1, 0);
	if(flag){
		printf("YES");
	} else {
		printf("NO");	
	}
	
	return 0;
}

선생님 말씀대로 코드를 짰는데요 우선 total%2 ==  1 (홀수)이면 즉시 종료하는것으로 하는건 좋은 답일까요 안좋은 답일까요?

답변 1

1

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

좋은 아이디어 입니다. 잘 하신 코드입니다.

Kyungbin Ryu님의 프로필 이미지
Kyungbin Ryu

작성한 질문수

질문하기