-
[C][백준] 5567. 결혼식 구현하기 | 깊이 제한 그래프 탐색Algorithm/백준 2023. 3. 6. 10:00728x90
이 문제의 핵심은 자신의 친구, 친구의 친구만 초대하는 것이다.
즉, 나(1번 노드)를 기준으로, 2단계 이내로 연결된 친구만 초대하는 것이다.
그렇다면 이 문제는 그래프 탐색 알고리즘에서 깊이를 제한하는 코드를 만들면 되는 것이다.
문득, 궁금증이 들었다. ChatGPT에 물어볼까?
그래서 ChatGPT에 이렇게 물어보았다.
자세한 답변 분석은 다음 포스트에 하겠다
아무튼 이 코드를 그대로 복붙할 수는 없으니 나의 코드와 결합하여 문제에 맞게 수정하였다.
ChatGPT에서 얻은 것은 level 배열을 쓰는 모티브랄까?
#include <stdio.h> #define MAX_SIZE 10005 int vertex, edge; int table[505][505] = {0}; int visit[MAX_SIZE] = {0}; int queue[MAX_SIZE]; int level[MAX_SIZE] = {0}; // ChatGPT의 도움! int front = 0, rear = 0; void addEdge(int n1, int n2); void bfs(int v, int depthLimit); // 깊이 제한 int main() { scanf("%d %d", &vertex, &edge); // 동기의 수, 리스트의 길이 for (int i = 0; i < edge; i++) { int f1, f2; scanf("%d %d", &f1, &f2); addEdge(f1, f2); } bfs(1, 2); // 1부터 bfs, 깊이 제한 2 int cnt = 0; for (int i = 2; i <= vertex; i++) // 자기자신(1) 제외 { if (0 < level[i]) cnt++; } printf("%d", cnt); return 0; } void addEdge(int n1, int n2) { table[n1][n2] = table[n2][n1] = 1; } void bfs(int v, int depthLimit) { int current; // 현재 방문 노드 queue[rear++] = v; visit[v] = 1; level[v] = 0; while (front < rear) { current = queue[front++]; if (level[current] == depthLimit) // 깊이 제한: 2 { continue; } for (int i = 1; i <= vertex; i++) { if (visit[i] || !table[current][i]) { continue; } queue[rear++] = i; visit[i] = 1; level[i] = level[current] + 1; } } }
728x90'Algorithm > 백준' 카테고리의 다른 글
[C][백준] ChatGPT로 백준 문제를 풀었다? - Python to C language migration, 9012번 괄호 (0) 2023.03.18 [C][백준] 1932. 정수 삼각형 구현하기 | Dynamic Programming (0) 2023.03.03 [C][백준] 20055번 컨베이어 벨트 위의 로봇 풀이 : 원형 연결리스트, 삼성 SW 역량 테스트 기출 문제 (0) 2022.11.02 [C][백준] 1357번 뒤집힌 덧셈 풀이 : 문자열, 배열을 쓰지 않고, C 숫자 분리 (0) 2022.09.29 [C][백준] 2346번 풍선 터뜨리기 문제 풀이 : 원형 연결리스트를 사용하여 (0) 2022.09.07