코딩테스트/백준

[백준] 1208번: 부분수열의 합 2

yjseo01 2023. 9. 27. 19:03

https://www.acmicpc.net/problem/1208

 

1208번: 부분수열의 합 2

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

처음에는 부분수열의 합을 모두 구해서 개수를 세야 하나 했는데,

n이 최대 40까지여서 계산을 최대 2^40번 해야하기 때문에 절대 아니구나 싶어서 고전하다가

내가 골1문제를 풀 수 있을리가 없다는 생각도 들고 해서 풀이를 봤다.

 

수열을 반으로 나누고 각각의 합을 구한 다음 정렬하고

왼쪽은 작은 값에서 큰 값으로 포인터를 증가시키고,

오른쪽은 포인터를 큰 값에서 작은 값으로 감소시키면서

이분 탐색으로 합이 s인 경우를 찾아주었다.

 

 

이해는 되지만 스스로는 절대 못 풀 것 같다...

 

참고
1208번 풀이: https://c4u-rdav.tistory.com/61

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 2632번: 피자판매  (0) 2023.09.29
[백준] 7453번: 합이 0인 네 정수  (0) 2023.09.28
[백준] 1261번: 알고스팟  (0) 2023.09.26
[백준] 1644번: 소수의 연속합  (0) 2023.09.25
[백준] 1806번: 부분합  (0) 2023.09.24