티스토리 뷰

문제

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

풀이과정

recursion을 통해 간단하게 해결할 수 있는 문제다. 입력 된 숫자들을 더하는 경우, 더하지 않고 그냥 넘어가는 경우 두 가지로 나누어서 재귀호출을 하면 된다.

소스코드

#include <iostream>

using namespace std;

#define MAX_N 21

int n, sum;
int num[MAX_N];
int ans;

void sub(int i, int prev_Sum)
{
    // index를 끝까지 했으면 종료
    if (i == n)
    {
        // sum과 같으면 ans++
        if (prev_Sum == sum)
            ans++;
        return;
    }

    // 숫자를 사용하는 경우
    sub(i + 1, prev_Sum + num[i]);
    // 사용하지 않는 경우
    sub(i + 1, prev_Sum);

}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n >> sum;

    for (int i = 0; i < n; i++)
    {
        cin >> num[i];
    }

    sub(0, 0);

    if (sum == 0) ans -= 1;

    cout << ans << "\n";

    return 0;
}

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

[백준] 14502번 연구소  (0) 2018.04.07
[백준] 2003번 수들의 합 2  (0) 2018.04.06
[백준] 1987번 알파벳  (0) 2018.04.06
[백준] 2580번 스도쿠  (0) 2018.04.06
[백준] 1759번 암호 만들기  (0) 2018.04.05
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함