우리가치 모각코 6회차
1. 일시
👉🏻 2022년 11월 01일
2. 장소
👉🏻 해동 도서관 지하 1층
3. 학습내용
오늘은 각자 풀고 싶은 알고리즘 문제를 정하고, 풀어보는 시간을 갖었다.
알고리즘 개념을 익히기 위해 요즘 유튜브에서 바킹독 알고리즘 영상을 보고 있는데, 빠르게 개념을 익히고 문제를 풀 수 있어서, 바킹독 채널에서 많은 도움을 받고 있다.
나는 BFS, DFS 관련 영상을 보면서 개념을 익히고, 관련 알고리즘 문제를 풀어보았다.
#2606
내가 정한 첫 번째 문제는 2606번의 바이러스 문제다.
#include <iostream>
#include <queue>
using namespace std;
bool infect[101] = {
false,
};
bool computer[101][101] = {
false,
};
queue<int> q; // computer 자료형이 아닌 idx가 들어가기 때문에 bool이 아닌 int
int com, pairs, cnt;
void bfs(int v)
{
infect[v] = true;
q.push(v);
while (!q.empty())
{
v = q.front();
q.pop();
for (int next = 1; next <= com; next++)
{
if (infect[next] == false && computer[v][next] == true)
{
q.push(next);
infect[next] = true;
++cnt;
// cout << v << " " << next << "\n";
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> com >> pairs;
int tmp1, tmp2;
for (int i = 0; i < pairs; i++)
{
cin >> tmp1 >> tmp2;
computer[tmp1][tmp2] = true;
computer[tmp2][tmp1] = true;
}
bfs(1);
cout << cnt << "\n";
return 0;
}
#1260
내가 정한 두 번째 문제는 1260번의 DFS와 BFS 문제다.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define MAXN 1001
using namespace std;
vector<int> v[MAXN];
queue<int> q;
bool check[MAXN];
int N, M, V;
void dfs(int n)
{
check[n] = true;
cout << n << " ";
for (int i = 0; i < v[n].size(); ++i)
{
if (check[v[n][i]])
continue;
else
dfs(v[n][i]);
}
}
void bfs()
{
while (!q.empty())
{
int u = q.front();
q.pop();
for (int i = 0; i < v[u].size(); ++i)
{
if (check[v[u][i]])
continue;
else
check[v[u][i]] = true;
q.push(v[u][i]);
cout << v[u][i] << " ";
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> V;
for (int i = 0; i < M; ++i)
{
int v1, v2;
cin >> v1 >> v2;
v[v1].push_back(v2);
v[v2].push_back(v1);
sort(v[v1].begin(), v[v1].end());
sort(v[v2].begin(), v[v2].end());
}
dfs(V);
cout << "\n";
fill(check, check + MAXN, false);
q.push(V);
check[V] = true;
cout << V << " ";
bfs();
return 0;
}
4. 소감(느낀 점)
다른 친구들보다 알고리즘을 늦게 시작해서 아직 기본 개념들을 학습하고 있는 중이다. 친구들과 이렇게 모각코를 하며 느끼는 것들 중 하나는 알고리즘 풀이 경험이 정말 중요하다는 것이다. 한 친구는 예전부터 계속 알고리즘을 풀어와서 그런지, 두려움없이 코딩테스트에 임하는데 나는 아직 많이 떨려서 코딩테스트 지원도 주저하는 것 같다...😢 그래도 후회없이 남은 기간동안 많이 풀어볼 수 있도록 노력해야겠다.
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
https://www.youtube.com/c/BaaarkingDog/videos
BaaarkingDog
www.youtube.com