티스토리 뷰
728x90
https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
처음엔 index와 depth를 dfs 매개변수로 잡고,
depth가 index만큼 dfs 실행하여 추출한 배열 요소들을 더한 뒤,
S와 비교하는 방식으로 구현해봤는데 아쉽게도 시간초과라 다른 방법을 생각하느라 시간을 많이 할애한 문제입니다.
결국엔 구글링의 도움을 받긴 했지만, 한가지 얻어갈 수 있었던건 dfs를 구현할 때 꼭 반복문이 들어가야 한다고 생각한 저의 고정관념을 고칠 수 있었던 것이었습니다.
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
29
30
31
32
33
|
import java.util.Scanner;
public class Main {
static int arr[];
static int N, S, res = 0, MAX = 20;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
S = sc.nextInt();
arr = new int[MAX];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
sc.close();
dfs(0, 0);
System.out.println(res);
}
public static void dfs(int idx, int sum) {
if (idx == N)
return;
if (sum + arr[idx] == S)
res++;
dfs(idx + 1, sum);
dfs(idx + 1, sum + arr[idx]);
}
}
|
cs |
'코딩 > 자바 백준' 카테고리의 다른 글
백준 1343 폴리오미노 (JAVA) (0) | 2021.08.15 |
---|---|
백준 11576 Base Conversion (JAVA) (0) | 2021.08.15 |
백준 9625 BABBA (JAVA) (0) | 2021.08.12 |
백준 5568 카드 놓기 (JAVA) (0) | 2021.08.12 |
백준 16922 로마 숫자 만들기 (JAVA) (0) | 2021.08.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 4446
- 백준 11123 파이썬
- 백준 12034 파이썬
- 백준 9205
- 백준 20362 파이썬
- 백준 12034
- 백준 23253 파이썬
- 백준 23253
- 백준 1504 파이썬
- 백준 9205 파이썬
- 백준 1916 파이썬
- 백준 2491 파이썬
- 백준 6593 파이썬
- 백준 6593
- 백준 2304 파이썬
- 백준 2075
- 백준 4446 파이썬
- 백준 11123
- 백준 2304
- 백준 12788
- 백준 10825
- 백준 12788 파이썬
- 백준 1351 파이썬
- 백준 1351
- 백준 13335 파이썬
- 백준 2075 파이썬
- 백준 13335
- 백준 20362
- 백준 1916
- 백준 10825 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함