Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Linked list
- gpdb
- 모의SW역량테스트
- aws
- Trie
- Python
- 코테
- SWEA
- 구현
- DFS
- 알고리즘
- programmers
- 시뮬레이션
- Vue.js
- 코딩테스트
- spring boot
- Data Structure
- hash table
- Back tracking
- Algorithm
- BFS
- Priority Queue
- 알고리듬
- Bruth Force
- CSV
- django
- JavaScript
- SQL
- boj
- GitHub
Archives
- Today
- Total
hotamul의 개발 이야기
[Algorithm][C++] BOJ 2606: 바이러스 (head, tail Linked List) 본문
myt-algorithm-practice/Samsung SW Certi Pro
[Algorithm][C++] BOJ 2606: 바이러스 (head, tail Linked List)
hotamul 2021. 11. 20. 23:27url: https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
풀이 핵심
1. 본 문제는 bfs 문제로 head 만을 이용한 linked list로 쉽게 풀 수 있다. 기본적으로 list의 들어오는 순서가 중요한 경우가 많으므로 이번엔 tail을 가지고 있는 linked list로 풀이해보고자 한다. 풀이에 대한 내용은 head만을 이용한 linked list 링크를 참조하자
2. head, tail을 가지고 있는 linked list 구조체
struct NODE {
int node;
NODE* next;
};
NODE HEAD[MAXN];
NODE TAIL[MAXN];
NODE POOL[MAXN * MAXN];
void make(int p, int c) {
NODE* nd = &POOL[pcnt++];
nd->node = c;
if (HEAD[p].next == NULL && TAIL[p].next == NULL) {
HEAD[p].next = TAIL[p].next = nd;
}
else {
TAIL[p].next->next = nd;
TAIL[p].next = nd;
}
}
코드
#include <cstdio>
#define MAXN 101
int N, M, ans;
struct NODE {
int node;
NODE* next;
};
NODE HEAD[MAXN];
NODE TAIL[MAXN];
NODE POOL[MAXN * MAXN];
int pcnt;
int visit[MAXN];
void make(int p, int c) {
NODE* nd = &POOL[pcnt++];
nd->node = c;
if (HEAD[p].next == NULL && TAIL[p].next == NULL) {
HEAD[p].next = TAIL[p].next = nd;
}
else {
TAIL[p].next->next = nd;
TAIL[p].next = nd;
}
}
int queue[MAXN * MAXN];
int fr, re;
void bfs() {
int cur;
fr = re = 0;
queue[re++] = 1;
visit[1] = 1;
while (fr != re) {
cur = queue[fr++];
for (NODE*p = HEAD[cur].next; p; p = p->next) {
if (visit[p->node] == 0) {
ans++;
queue[re++] = p->node;
visit[p->node] = 1;
}
}
}
}
int main() {
scanf("%d %d", &N, &M);
for (int i = 0; i < M; i++) {
int p, c;
scanf("%d %d", &p, &c);
make(p, c);
make(c, p);
}
bfs();
printf("%d", ans);
return 0;
}
'myt-algorithm-practice > Samsung SW Certi Pro' 카테고리의 다른 글
[Algorithm][C++] BOJ 1620: 나는야 포켓몬 마스터 이다솜 (Hash Table - Chaining (Single Linked List) (0) | 2021.11.22 |
---|---|
[Algorithm][C++] BOJ 3190: 뱀 (Double Linked List) (0) | 2021.11.21 |
[Data Structure][C++] Linked List (0) | 2021.11.19 |
[Algorithm][C++] BOJ 1707: 이분 그래프 (0) | 2021.11.19 |
[Algorithm][C++] BOJ 2606: 바이러스 (head Linked List) (0) | 2021.11.19 |
Comments