728x90
문제
14225번: 부분수열의 합
수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들
www.acmicpc.net
접근
- 입력된 수열을 정렬한 후에 순서대로 처리
- 변수 a는 현재까지의 부분합
- 반복문을 통해 수열을 순회하면서 a에 현재 수를 더하기
- 만약, 현재까지의 부분합에 1을 더한 값보다 현재 수가 크면 반복문을 중단
- 이때, 중단되는 시점에서의 a값은 부분합 중 가장 작은 자연수
- a + 1을 출력하여 문제의 답 출력
코드
# 입력 받기
input()
a = 0 # 부분합을 저장할 변수
# 입력된 수열을 정렬하여 순서대로 처리
for i in [*sorted(map(int, input().split()))]:
if a + 1 < i:
break # 현재까지의 부분합에 1을 더한 값보다 현재 수가 크면 중단
a += i # 현재 수를 부분합에 더함
print(a + 1) # 현재까지의 부분합에 1을 더한 값 출력
'프로그래밍 > 알고리즘' 카테고리의 다른 글
백준 1302 - 베스트셀러 파이썬 (0) | 2023.06.16 |
---|---|
냅색(Knapsack)알고리즘(배낭 문제) (0) | 2023.06.14 |
백준 15736 - 청기 백기 파이썬 (2) | 2023.06.08 |
백준 1145 - 적어도 대부분의 배수 파이썬 (0) | 2023.06.05 |
프로그래머스 - 표편집 파이썬 (0) | 2023.06.01 |
댓글