본문 바로가기

분류 전체보기

(146)
[ BOJ 백준 10159번 - 저울 ] 해설 및 코드 https://www.acmicpc.net/problem/10159 목적 물건 쌍의 비교 결과를 알 수 있는지 구하자. 접근법 1. 플로이드 와샬 알고리즘을 이용하여 방향 그래프의 연결 여부를 구한다. 2. 비교 결과를 알 수 있는지 여부는 양방향으로 검사한다. 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 #include #define f(i,l,r) for(int i=l;i>n>>m; f(i,1,n)g[i][i]=1; while(m--){ int a,b;cin>>a>>b; g[a][b]=1; } f(k,1,n)f(i,1,n)f(j,1,n)if(g[i][k]&&g[k][j])g[i][j]=1; f(i,1,n){ int cnt=n; ..
[ BOJ 백준 11404번 - 플로이드 ] 해설 및 코드 https://www.acmicpc.net/problem/11404 목적 모든 정점간 최단 거리를 구하자. 접근법 1. 모든 정점간 최단 거리를 구해야 하므로 플로이드 와샬 알고리즘을 사용해서 구한다. 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 #include #define f(i,r,l) for(int i=r;i> n >> m; f(i, 1, n) { f(j, 1, n)s[i][j] = INF; s[i][i] = 0; } while (m--) { int a, b, c; cin >> a >> b >> c; s[a][b] = min(s[a][b], c); } f(k, 1, n)f(i, 1, n)f(j..
[ BOJ 백준 1389번 - 케빈 베이컨의 6단계 법칙 ] 해설 및 코드 https://www.acmicpc.net/problem/1389 목적 각 정점간의 거리를 구하고, i정점에서 나머지 정점간 거리의 합이 최소인 i를 구하자. 접근법 1. 플로이드 와샬 알고리즘을 이용해 모든 정점간 거리를 구하자. 2. 다음, 거리합이 최소인 정점을 구한다. 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 32 33 34 35 #include #define f(i,r,l) for(int i=r;i> n>>m; f(i, 1, n) { f(j, 1, n)s[i][j] = INF; s[i][i] = 0; } while (m--) { int a, b; cin >> a >> b; s[a][b] ..
[ BOJ 백준 2211번 - 네트워크 복구 ] 해설 및 코드 https://www.acmicpc.net/problem/2211 목적 본문을 요약하자면 최소 스패닝 트리를 구하라는 것이다. 접근법 1. 다익스트라 알고리즘을 활용하여 접근하자. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include #define f(i,r,l) for(int i=r;i tmp) { a[i] = tmp; b[i] = v; q.push({ tmp,i }); } } } cout
[ BOJ 백준 5719번 - 거의 최단 경로 ] 해설 및 코드 https://www.acmicpc.net/problem/5719 목적 최단 경로를 모두 제거한 뒤에 최단 경로를 구하자. 접근법 1. 다익스트라 알고리즘으로 S에서 D로 가는 최단 경로를 구하자. 2. 그런다음 여러개가 될 수 있는 최단경로를 백트래킹으로 D부터 S까지 지워준다. 3. 이제 다시 최단 경로를 구하면 원하는 답이 나온다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #include #define f(i,r,l) for(int i=r;i tmp) {..
[ BOJ 백준 1916번 - 최소비용 구하기 ] 해설 및 코드 https://www.acmicpc.net/problem/1916 목적 두 정점간의 최단 거리를 구하자. 접근법 1. 다익스트라 알고리즘을 이용하여 정점간 최단 거리를 갱신해 나가다가 목적지를 만나면 출력 후 종료한다. 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 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #include #define MAX_N 1001 #define MAX_W (int)1e10 using namespace std; struct info { int v, w; bool operator oth.w; } }; void go(int n,..
[ BOJ 백준 1753번 - 최단경로 ] 해설 및 코드 https://www.acmicpc.net/problem/1753 목적 방향그래프에서 최단경로를 구하자. 접근법 1. 최단거리를 구하는데 다익스트라 알고리즘을 이용한다. 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 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #include #define MAX_V 20001 #define MAX_W 200001 using namespace std; struct info { int u, w; bool operator oth.w; } }; void go(int V, int K, vector* G) { vector sp..
[ BOJ 백준 11403번 - 경로 찾기 ] 해설 및 코드 https://www.acmicpc.net/problem/11403 목적 모든 두 정점간의 경로가 존재하는지 구하자. 접근법 1. 플로이드 와샬 알고리즘으로 접근하자. 2. 알고리즘에 의해 i에서 j로 k를 거쳐갈 때, i와 k간의 경로가 존재하고 k와 j간의 경로가 존재하면 i와 j간의 경로가 존재하는 것이므로 값을 갱신한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include #define f(i,l,r) for(int i=l;i>n;f(i,0,n)f(j,0,n)cin>>a[i][j]; f(k,0,n)f(i,0,n)f(j,0,n)if(a[i][k]&&a[k][j])a[i][j]=1; f(i,0,n){ f(j,0,n)cout