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
- java
- JUnit 5
- 구현
- 완전탐색
- 프로그래머스
- 알고리즘
- 그리디
- 위상정렬
- dfs
- mst
- BFS
- 문자열
- 투 포인터
- Network
- 시뮬레이션
- 동적계획법
- 백준
- 유니온 파인드
- 세그먼트 트리
- 스택
- 플로이드-와샬
- 이분탐색
- 수학
- 백트래킹
- swea
- Kotlin
- CS
- Effective Java
- 에라토스테네스의 체
- 후니의 쉽게 쓴 시스코 네트워킹
Archives
반갑습니다!
[프로그래머스] 배달 본문
풀이
그래프의 최단 거리를 계산해서 해결하는 문제이다. 따라서 최단 경로 알고리즘을 사용하면 해결할 수 있을 것으로 보이는데, 해당 문제에서 N이 최대 50이므로 간단한 플로이드-와샬 알고리즘을 사용해서 해결했다. 이 문제에서 플로이드-와샬 알고리즘을 사용할 때 주의할 점은 a에서 b로 가는 경로가 여러 개일 수 있다는 점이다. 따라서 인접 배열을 만들 때, 해당 경로에 대한 최솟값으로 만들어줘야한다.
코드
C++
#include <vector>
#include <algorithm>
#define MAX 987654321
using namespace std;
int solution(int N, vector<vector<int> > road, int K) {
vector<vector<int>> adj(N + 1, vector<int>(N + 1, MAX));
for (vector<int> r : road) {
int a = r[0], b = r[1], c = r[2];
adj[a][b] = min(adj[a][b], c);
adj[b][a] = min(adj[b][a], c);
}
for (int k = 1; k <= N; k++) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (adj[i][k] != MAX && adj[k][j] != MAX) {
adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]);
}
}
}
}
int answer = 1;
for (int i = 2; i <= N; i++)
if (adj[1][i] <= K) answer++;
return answer;
}
Java
class Solution {
static int MAX = Integer.MAX_VALUE;
public int solution(int N, int[][] road, int K) {
int[][] adj = new int[N + 1][N + 1];
for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) adj[i][j] = MAX;
for (int[] r : road) {
int a = r[0], b = r[1], c = r[2];
adj[a][b] = Integer.min(adj[a][b], c);
adj[b][a] = Integer.min(adj[b][a], c);
}
for (int k = 1; k <= N; k++) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (i == j) continue;
if (adj[i][k] != MAX && adj[k][j] != MAX) {
adj[i][j] = Integer.min(adj[i][j], adj[i][k] + adj[k][j]);
}
}
}
}
int answer = 1;
for (int i = 2; i <= N; i++)
if (adj[1][i] <= K)
answer++;
return answer;
}
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 4485 녹색 옷 입은 애가 젤다지? (0) | 2020.09.05 |
---|---|
[프로그래머스] 기지국 설치 (0) | 2020.09.05 |
[프로그래머스] 줄 서는 방법 (0) | 2020.09.05 |
[프로그래머스] 거스름돈 (0) | 2020.09.04 |
[프로그래머스] 순위 (0) | 2020.09.04 |