[BOJ][⚪2][백준#23057] 도전 숫자왕

작성:    

업데이트:

카테고리:

태그: , , ,

문제 출처

BAEKJOON Online Judge #23057


문제

오늘은 즐거운 축제날이다. 백남이는 축제에서 무엇을 할까 돌아다니던 중 도전 숫자왕이라는 행사를 발견했고 100만원이라는 상금에 홀려 바로 참가하였다. 도전 숫자왕은 $N$개의 숫자 카드를 조합하여 다양한 수를 만드는 게임이다. 이번 라운드에서는 카드의 적힌 수의 합으로 만들 수 없는 수의 개수를 외치면 이긴다. 백남이가 1등을 하여 축제를 즐길 수 있도록 도와주자.

 


입력

첫 번째 줄에는 카드의 개수 $N$($1\leq N \leq 20$)이 주어진다. 두 번째 줄에는 $N$개의 수가 주어진다. 입력으로 주어지는 수는 100,000,000 이하의 자연수이다.


출력

모든 카드에 적힌 수의 합을 $M$이라고 할 때, 1 이상 $M$ 이하의 자연수 중 만들 수 없는 수의 개수를 출력한다.


예제

예제 1

입력

3
1 2 3


출력

0


예제 2

입력

3
1 3 4


출력

2


My Sol

from itertools import combinations

N = int(input())
arr = list(map(int, input().split()))
S = set()
for n in range(1, N+1):
    for comb in combinations(arr, n):
        S.add(sum(comb))

print(sum(arr)-len(S))

모든 경우의 수에 대해 완전탐색하여 경우를 계산하고, 이를 전체 합에서 뺀 값을 출력한다. 이때 중복되는 수의 제거를 쉽게 하기 위해 set을 이용한다.


결과

맞았습니다!!

N이 최대 20이어서 combination으로 하면 너무 많은 경우의 수가 나올까봐 쫄았는데 어찌저찌 잘 풀어졌다.

댓글남기기