https://www.acmicpc.net/problem/1450
문제
세준이는 N개의 물건을 가지고 있고, 최대 C만큼의 무게를 넣을 수 있는 가방을 하나 가지고 있다.
N개의 물건을 가방에 넣는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 C가 주어진다. N은 30보다 작거나 같은 자연수이고, C는 10^9보다 작거나 같은 음이아닌 정수이고. 둘째 줄에 물건의 무게가 주어진다. 무게도 10^9보다 작거나 같은 자연수이다.
출력
첫째 줄에 가방에 넣는 방법의 수를 출력한다.
중간에서 만나기 알고리즘 처음 접해서 어려웠던 문제이다.
- 범위를 반으로 나누어 앞의 절반에서 나올 수 있는 무게의 합의 모든 경우의 수를 리스트 A에 입력한다.
- 뒤의 절반에서 나올 수 있는 무게의 합의 경우의 수를 리스트 B에 입력한다.
- 기준 리스트를 정하여 정렬한다.
- 이분탐색 한다.
풀면서 이 과정을 이해하는데 시간이 정말 오래걸렸다.
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준] 백트래킹 - 2580번: 스도쿠 (Java) (0) | 2021.07.18 |
---|---|
[백준] 동적 계획법 - 2156번: 포도주 시식 (0) | 2021.07.17 |
[백준] DFS와 BFS - 10026번: 적록색약 (Java) (0) | 2021.07.15 |
[백준] 그리디 - 1946번: 신입사원 (Java) (0) | 2021.07.14 |
[백준] 동적 계획법 - 10844번: 쉬운 계단 수 (Java) (0) | 2021.07.13 |
댓글