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에 들어있는 값들을 출력해주면 된다.