on my way
[GDSC Week3-2] 백준 1182번:: 부분수열의 합 (C++) 본문
반응형
* 생각한 아이디어 및 문제 풀이
수 하나를 더할 때 마다 답이 아니면 처음부터 진행하는 것이 아닌, 그 수를 빼고 다른 수를 더해 확인하는 백트래킹 방식을 사용하여 재귀함수 형식으로 문제를 풀이한다.
주의할 점은 sum이 해당하는 값에 도달하더라도 뒤의 것을 계속해서 탐색해야한다는 것이다.
* 코드
#include <iostream>
using namespace std;
int arr[21];
int N, S, cnt=0;
void backTracking(int start, int sum) {
if (start >= N) return;
int tmp = sum;
tmp += arr[start];
if (tmp == S) cnt++;
for (int i=start+1; i<N; i++){
backTracking(i, tmp);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int tmp;
cin >> N >> S;
for (int i=0; i<N; i++){
cin >> arr[i];
}
for (int i=0; i<N; i++) {
tmp = 0;
backTracking(i, tmp);
}
cout << cnt;
}
* 회고
* 문제 링크 : https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
https://velog.io/@ynoolee/BackTracking%EB%B0%B1%EC%A4%801182%EB%B2%88
BackTracking_백준1182번
부분수열에 속한 원소를 모두 합한 것이 S가 되는 부분수열의 개수를 출력.부분 수열이라는 것은 결국, 어떤 시작점부터 어떤 끝점까지 연속한 원소들의 집합.전체 탐색을 해야하는가? 시간제한
velog.io
반응형
'algorithm > C++' 카테고리의 다른 글
[GDSC Week3-4] 백준 9663번:: N-Queen (C++) (0) | 2021.10.24 |
---|---|
[GDSC Week3-3] 백준 14888번:: 연산자 끼워넣기 (C++) (0) | 2021.10.24 |
[GDSC Week3-1] 백준 1489번:: 스타트와 링크 (C++) (0) | 2021.10.24 |
[GDSC Week2-4] 백준 3078번:: 좋은친구 (C++) (0) | 2021.10.11 |
[GDSC Week2-3] 백준 2346번:: 풍선 터뜨리기 (C++) (0) | 2021.10.11 |