728x90
문제 링크: https://www.acmicpc.net/problem/23057
23057번: 도전 숫자왕
모든 카드에 적힌 수의 합을 $M$이라고 할 때, 1 이상 $M$ 이하의 자연수 중 만들 수 없는 수의 개수를 출력한다.
www.acmicpc.net
문제 풀이
심심해서 BOJ 들어갔다가 대회가 20분 남짓 남아서 딱 3문제 풀었다. 이 문제는 그 3문제 중 하나.
각설하고, 조합을 이용하여 N개의 수 중 1~N개를 선택하여 조합을 만들어주고 합을 구한다.
이때, 합이 중복될 수도 있으므로 set()을 이용하여 중복값을 없애주었다.
또한 1부터 M까지 반복문을 돌리려고 하면 시간 초과가 날 것이다. M은 최대 2,000,000,000이기 때문이다.
따라서 M에서 set()에 있는 길이를 빼준다.
즉, M - (조합으로 구할 수 있는 수의 개수)를 구하면 O(1)에 가능하다.
코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from itertools import combinations as c | |
n = int(input()) | |
array = list(map(int, input().split())) | |
m = sum(array) | |
num = set() | |
for i in range(1, n+1): | |
for j in c(array, i): | |
num.add(sum(j)) | |
print(m-len(num)) |
728x90
'BOJ' 카테고리의 다른 글
[BOJ][Python] 백준 23056번 - 참가자 명단 (0) | 2021.09.20 |
---|---|
[BOJ][Python] 백준 4358번 - 생태학 (0) | 2021.09.20 |
[BOJ][Python] 백준 20365번 - 블로그2 (0) | 2021.09.20 |
[BOJ][Python] 백준 7044번 - Bad Cowtractors (0) | 2021.09.20 |
[BOJ][Python] 백준 9517번 - 아이 러브 크로아티아 (0) | 2021.09.20 |