문제
정답 코드
#include<bits/stdc++.h>
using namespace std;
int n,s;
int cnt;
int num[21];
int ret[21]; // 결과를 담을 배열
void func(int k,int tot)
{
if (k == n)
{
if (tot == s)
cnt++;
return ;
}
func(k+1,tot);
func(k+1,tot+num[k]);
}
int main()
{
ios:: sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n>>s;
for (int i=0;i < n;i++) cin >> num[i];
func(0,0);
if ( s== 0 )
cnt --;
cout << cnt;
}
문제 풀이의 흐름
바킹독 흐름을 따라간다.
주의 할 점
그냥 백드래킹을 혼자서 안 해봐서 그런지.. 너무 오래걸렸다..
반성 및 고찰
실패 코드
#include<bits/stdc++.h>
using namespace std;
int n,s;
int cnt;
int num[21];
int vis[21];
void func(int depth,int sum)
{
if (depth == n + 1)//n개가 된 경우 0~n - 1까지가 원하는 만큼이므로 종료
return ;
// cout << "d : "<<depth << " ";
if (depth != 0 && sum == s)
{
cout << depth << " ";
cnt++;
}
for (int i=1;i <= n;i++)
{
if (vis[i] == 0)
{
vis[i] = 1;
func(depth+1,sum + num[i]);
vis[i] = 0;
}
}
}
int main()
{
cin >> n>>s;
for (int i=1;i <= n;i++) cin >> num[i];
func(0,0);
cout << cnt;
}
첫번쨰 오답코드의 경우 모든 경우 예를들어 {0,1,2} 의 경우에
0 ,1 ,2 | 1,2,0 | 0, 2,1 | 2,1,0 | 2,0,1 |1,0,2 이 모든게 다 다른 경우로 아마 들어갈것이다.
두번째 오답 코드
#include<bits/stdc++.h>
using namespace std;
int n,s;
int cnt;
int num[21];
int vis[21];
int ret[21]; // 결과를 담을 배열
void func(int depth)
{
if (depth == n)//n개가 된 경우 0~n - 1까지가 원하는 만큼이므로 종료
return ;
// cout << "d : "<<depth << " ";
int sum = 0;
for (int i=0;i < depth;i++)
sum+=ret[i];
if (depth != 0&& sum == s)
cnt++;
for (int i=1;i <= n;i++)
{
if (depth != 0 && num[depth -1] < i)
continue;
if (vis[i] == 0)
{
vis[i] = 1;
ret[depth] = num[i];
func(depth+1);
vis[i] = 0;
}
}
}
int main()
{
ios:: sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n>>s;
for (int i=1;i <= n;i++) cin >> num[i];
func(0);
cout << cnt;
}
난 바보다.
속상하다.
쉬운 문제인데도 못푸는 내가 너무 스트레스다.
이 문제를 위해서 2시간을 넘게 잡고 있었는데도 혼자 힘으로 못 풀고 결국 답지를 본 나 자신이 너무 싫다. 내가 멍청한 것 같고 코딩을 해도 되나라는 생각이 자꾸 든다.
나의 알고리즘 열등감이 또 쌓여간다.
백준 골드 3을 달성했지만 할 줄아는 알고리즘만 계속 하고, 거의 다 dfs 그리디 문제들이여서 편식 그 자체를 했었다. 사실 내 실력은 실버는 될까..
속상하다.속상해. 알고리즘 공부는 너무 힘들다.
그래도 하루 한문제씩은 해봐야지…
Uploaded by N2T
728x90
'알고리즘 > 백준-실버' 카테고리의 다른 글
백준 11660번 구간 합 구하기 5(C++) (0) | 2023.10.13 |
---|---|
백준 15650번 N과 M(2) (C++) (0) | 2023.01.17 |
백준 1189번 컴백홈 dfs(C++) (0) | 2023.01.10 |
백준 1325번 효율적인 해킹(C++) (2) | 2023.01.09 |
백준 9012번 괄호 (C++) (스택활용) (0) | 2023.01.08 |