[BOJ][⚪2][백준#23057] 도전 숫자왕
작성:    
업데이트:
카테고리: BOJ Silver II
태그: BOJ, BOJ Silver, PS, Python
문제 출처
문제
오늘은 즐거운 축제날이다. 백남이는 축제에서 무엇을 할까 돌아다니던 중 도전 숫자왕이라는 행사를 발견했고 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으로 하면 너무 많은 경우의 수가 나올까봐 쫄았는데 어찌저찌 잘 풀어졌다.
댓글남기기