티스토리 뷰


크기가 양수인 부분수열의 모든 원소의 합이 S가 되는 경우를 구하는 문제이다.

 

부분수열의 합1

 

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

위 문제와 유사한 풀이로 해결이 가능하다.

 

하지만 부분 수열의합1의 최대 크기가 2^20인데 반해 부분수열의 합2은 최대 크기가 2^40이다. 따라서 시간복잡도를 줄일 방법이 필요하다.

 

시간복잡도를 줄이기위해 배열을 반으로 나눌 수 있다. 반으로 나눈다면 각 배열의 최대 크기는 2^20이 되고 최종적으로 최악의 시간 복잡도는 2^21이 되어 시간복잡도가 거의 절반으로 줄어든다.

 

배열을 반으로 나눈 뒤에는 투 포인터(left, right)를 사용하여 이분탐색을 수행하면 문제를 해결할 수 있다.

 

Python

Java

728x90

'PS > 백준' 카테고리의 다른 글

[백준] 1436 영화감독 숌  (0) 2021.04.15
[백준] 1450 냅색문제  (0) 2021.04.12
[백준] 2632 피자 판매  (0) 2021.04.11
[백준] 1253 좋다  (0) 2021.04.11
[백준] 17825 주사위 윷놀이  (0) 2021.04.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함