소스코드
N = int(input())
seq = list(map(int,input().split()))
bf = [False] * 10000000
subsets = [[]]
for num in seq:
size = len(subsets)
for y in range(size):
bf[sum(subsets[y]+[num])] = True
subsets.append(subsets[y]+[num])
for i in range (1,len(bf)):
if bf[i] == False :
print(i)
break
알고리즘
1. 모든 가능한 부분 수열의 합을 구한다.
2. 존재를 체크하는 list 선언 후 수열의 합이 있으면 True를 선언한다.
3. 1부터 for 문을 돌면서 수열의 합으로 나타내지 못한 애 (False인 애들)을 출력하고 종료한다.
실행 시간이 좀 오래걸렸지만 그래도 코드는 돌아가니깐...
input()
a=0
for i in [*sorted(map(int,input().split()))]:
if a+1<i:break
a+=i
print(a+1)
다른 사람의 풀이인데 세상에,, 코드는 역시 잘하는 사람꺼를 써야하나보다.
잘하는 사람이 되기 위해 노력하자
'Coding test' 카테고리의 다른 글
[백준/6588/파이썬] 골드바흐의 추측 (0) | 2023.01.22 |
---|---|
[백준/16936/파이썬] 나3곱2 (0) | 2023.01.21 |
[백준/2468/파이썬] 안전영역 - DFS(재귀) (0) | 2023.01.19 |
[백준/7576/파이썬] 토마토 (0) | 2023.01.18 |
[백준/14500/파이썬] 테트로미노 (0) | 2023.01.17 |