본문 바로가기
프로그래밍/알고리즘

백준 14225 - 부분수열의 합

by monicada 2023. 6. 13.
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

LIS알고리즘 설명 / 출처: https://chanhuiseok.github.io/posts/algo-49

접근 

- 입력된 수열을 정렬한 후에 순서대로 처리

- 변수 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을 더한 값 출력

댓글