Game Develop

[Algorithm]Baekjoon 12101번 :: 1,2,3 더하기 2 본문

Algorithm/Baekjoon

[Algorithm]Baekjoon 12101번 :: 1,2,3 더하기 2

MaxLevel 2024. 1. 20. 21:54

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

 

12101번: 1, 2, 3 더하기 2

n을 1, 2, 3의 합으로 나타내는 방법 중에서 사전 순으로 k번째에 오는 것을 출력한다. k번째 오는 식이 없는 경우에는 -1을 출력한다.

www.acmicpc.net

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
int n, k;
vector<int> v;
int answer = -1;
 
void dfs(int sum)
{
    if (sum == n)
    {
        --k;
 
        if (k == 0)
        {
            for (int i = 0; i < v.size(); ++i)
            {
                if (i == v.size() - 1)
                {
                    cout << v[i];
                }
                else
                {
                    cout << v[i] << '+';
                }
            }
 
            exit(0);
        }
        return;
    }
 
    if (sum > n) return;
 
    for (int i = 1; i <= 3++i)
    {
        v.push_back(i);
        dfs(sum + i);
        v.pop_back();
    }
}
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> n >> k;
 
    dfs(0);
 
    cout << -1;
}
 
 
 
 
cs

 

왜 실버1인지는 모르겠지만... 어쨌든 1,2,3시리즈를 전부 풀려고 풀어봤다.

그냥 완탐을 하면서 타겟값에 도달했을 때마다 카운팅을 해주고, k번째에 도달했을 때 v에 들어있는 값들을 출력해주면 된다.