본문 바로가기

728x90
반응형
SMALL

깊이 우선 탐색

(20)
백준 1325번 [효율적인 해킹](C++) -yes6686- 티스토리 백준 문제 풀이: 1325 (효율적인 해킹)문제 링크: https://www.acmicpc.net/problem/1325문제 설명:컴퓨터 n대가 있고, 각각 신뢰 관계를 가진다. 한 컴퓨터가 다른 컴퓨터를 신뢰하면, 해킹 시 신뢰하는 컴퓨터도 함께 해킹된다. 이때, 어떤 컴퓨터를 해킹했을 때 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터 번호를 모두 출력하라.핵심 알고리즘: 역방향 그래프를 구성하여 각 정점에서 DFS를 수행하면서 자신을 도달할 수 있는 정점 개수를 카운팅. 가장 큰 개수에 해당하는 정점들을 우선순위 큐에 저장 후 출력.문제 해결 코드// DFS로 역방향 해킹 그래프 탐색#include #include #include #include using namespace std;int visited[..
백준 2617번 [구슬 찾기](C++) -yes6686- 티스토리 백준 문제 풀이: 2617 (구슬 찾기)문제 링크: https://www.acmicpc.net/problem/2617문제 설명:각 구슬의 무게가 서로 다르며, 일부 구슬들 사이의 비교 결과가 주어졌을 때, 특정 구슬의 무게가 전체에서 중간이 아님을 판별하는 문제입니다. 즉, 어떤 구슬이 n개의 구슬 중 정확히 중간보다 무거운지/가벼운지를 확정할 수 없는지를 판별합니다.구슬 수 N(≤100), 비교 결과 수 M(≤N(N-1)/2)이 주어지고, 모든 구슬을 대상으로 탐색하면서 절반 이상 무겁거나 가벼운 구슬 수를 구해 조건에 만족하면 해당 구슬은 중간이 될 수 없습니다.문제 해결 코드// 구슬 찾기 (양방향 DFS 탐색)#include #include #include using namespace std;ve..
백준 33888번 [가오리 그래프](C++) -yes6686- 티스토리 백준 문제 풀이: 33888 (가오리 그래프)문제 링크: https://www.acmicpc.net/problem/33888문제 설명:가오리 그래프는 특정 규칙을 가진 무방향 연결 그래프입니다. N개의 정점과 N+3개의 간선으로 구성되며, 총 6개의 핵심 정점(머리 A, 왼쪽 날개 B, 중심 C, 오른쪽 날개 D, 아래쪽 날개 E, 꼬리 F)과 N−6개의 일반 정점으로 이루어져 있습니다.핵심 정점 사이에는 특정 쌍 간 단순 경로가 존재하고, 일반 정점은 항상 두 개의 정점과 연결되어 있으며 이 경로를 구성하는 중간 지점입니다. 주어진 그래프는 항상 가오리 그래프임이 보장되며, 정점 번호를 기준으로 핵심 정점을 판별할 수 있습니다. 단, D의 번호는 B보다 크다는 조건이 주어집니다.문제 해결 코드#incl..
백준 9466번 [텀 프로젝트](C++) -yes6686- 티스토리 백준 문제 풀이: 9466 (텀 프로젝트)문제 링크: https://www.acmicpc.net/problem/9466문제 설명:N명의 학생들이 각각 한 명씩만 선택하여 사이클을 이루는 구조에서, 팀을 이룰 수 있는 사람들의 수를 파악하는 문제입니다.선택 관계는 방향 그래프로 표현되며, 사이클을 이루는 사람만이 팀이 됩니다. 팀을 이룰 수 없는 학생의 수를 출력해야 합니다.문제 해결 코드// 백준 9466 - 텀 프로젝트#include #include #include #include using namespace std;vector v[100001];queue q;int visited[100001];int checked[100001];void dfs(int s, int x, int d) { int k..
백준 1520번 [내리막 길](C++) -yes6686- 티스토리 백준 문제 풀이: 1520 [내리막 길]문제 링크: https://www.acmicpc.net/problem/1520문제 설명:지도의 각 칸에는 높이가 주어지며, (0,0)에서 시작하여 (n-1,m-1)까지 가는 경로 중에서 항상 내리막길만 이동하는 경우의 수를 구하는 문제입니다.즉, 현재 위치보다 낮은 위치로만 이동할 수 있으며, 가능한 모든 경로의 개수를 출력해야 합니다.문제 해결 코드#include using namespace std;int dx[4] = { 1, -1, 0, 0 };int dy[4] = { 0, 0, 1, -1 };int arr[501][501]; // 지도 정보long long dp[501][501]; // 메모이제이션 배열int n, m;// 깊이 우선 탐색 (DFS) + 동적..
백준 21606번 [아침 산책](C++) -yes6686- 티스토리 백준 문제 풀이: 21606 [아침 산책]문제 링크: https://www.acmicpc.net/problem/21606문제 설명:그래프로 주어진 지도에서, 실내와 실외의 노드를 기반으로 산책 루트를 계산하는 문제입니다. 실내 노드에서 시작하여 다른 실내 노드로 가는 모든 가능한 경로를 찾아야 합니다. 그래프에서 실내 노드끼리는 직접 연결되고, 실외 노드는 경유지로만 사용됩니다.목표는 실내 노드 사이의 경로를 계산하여 출력하는 것입니다.문제 해결 코드#include #include #include #include using namespace std;int arr[200001]; // 노드 타입 저장 (0: 실외, 1: 실내)vector v[200001]; // 인접 리스트queue q; // BFS를 위..
백준 1707번 [이분 그래프](C++) -yes6686- 티스토리 백준 문제 풀이: 1707 [이분 그래프]문제 링크: https://www.acmicpc.net/problem/1707문제 설명:주어진 그래프가 이분 그래프인지 판별하는 문제입니다. 이분 그래프란, 그래프의 정점을 두 그룹으로 나누었을 때, 같은 그룹 내의 정점들끼리는 간선이 존재하지 않는 그래프를 의미합니다.주어진 그래프의 정점 수 (V)와 간선 수 (E) 및 각 간선 정보 (a, b)를 입력받아, 그래프가 이분 그래프이면 "YES", 아니면 "NO"를 출력합니다.문제 해결 코드#include #include #include using namespace std;vector v[20001];int visited[20001];int check = 0;void dfs(int a) { for (int i..
백준 11725번 [트리의 부모 찾기](C++)-yes6686- 티스토리 백준 문제 풀이: 11725 [트리의 부모 찾기]문제 링크: https://www.acmicpc.net/problem/11725문제 설명:루트가 1인 트리가 주어질 때, 각 노드의 부모를 구하는 문제입니다. 트리는 무방향 그래프로 주어지며, n개의 노드와 n-1개의 간선을 가집니다.입력:첫째 줄에 노드의 개수 n (2 ≤ n ≤ 100,000)이 주어집니다.다음 n-1개의 줄에 간선 정보가 주어집니다. 각 줄에는 두 정수 x, y가 주어지며, 이는 노드 x와 노드 y가 연결되어 있음을 나타냅니다.출력:2번 노드부터 n번 노드까지의 부모를 한 줄에 하나씩 출력합니다.문제 해결 코드#include #include #include using namespace std;vector tree[100001];int ..

728x90
반응형
LIST