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 |
Tags
- c++
- Level 4
- DP
- 구현
- pass
- 코드 리뷰
- Level 2
- next_permutation
- 브루트포스
- 프로그래머스
- 2020 KAKAO BLIND
- level 1
- Level 3
- BFS
- 2019 KAKAO BLIND
- Web
- Gold 4
- SWEA
- 그리디
- 삼성 SW 역량 테스트
- 부스트코스
- DFS
- 백트래킹
- 백준
- 2020 카카오 인턴십
- 월간 코드 챌린지
- 코드리뷰
- 스택/큐
- 시뮬레이션
- Gold 5
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][그리디][C++] 섬 연결하기 본문
문제
프로그래머스 그리디 - 섬 연결하기 (Level 3)
코딩테스트 연습 - 섬 연결하기
4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4
programmers.co.kr
문제 풀이
접근 방식
모든 섬을 연결하는 최소 비용을 구하는 문제이다.
이 문제는 프림 알고리즘을 활용하여 문제를 해결하였다.
우선, 주어진 costs 벡터를 활용하여 인접 행렬을 만들어주었다.
그 후, 방문한 섬과 방문하지 않은 섬의 인덱스를 구분해주기 위해,
시작 위치인 0을 visited 벡터에 넣고, 그 외의 섬들의 인덱스를 unvisited 벡터에 넣어주었다.
while문에서는 프림 알고리즘을 활용하여 다리를 선택해주었다.
즉, 방문한 섬에서 방문하지 않은 섬으로 연결할 수 있는 다리들 중 최소 비용이 드는 다리를 선택해주었다.
선택한 다리와 연결되어 있는 섬은 방문한 섬에 추가하고, 방문하지 않은 섬에서 제거해주었다.
위의 방식을 n - 1개의 다리를 선택할 때까지 수행하여 최종적인 최소 비용을 구해주었다.
(n - 1개의 다리를 설치해야 모든 섬을 연결할 수 있다.)
풀이 코드 - C++
#include <vector>
using namespace std;
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
vector<vector<int>> graph(n,vector<int>(n));
int len = costs.size();
for(int i = 0; i < len; i++){
graph[costs[i][0]][costs[i][1]] = costs[i][2];
graph[costs[i][1]][costs[i][0]] = costs[i][2];
}
vector<int> visited;
visited.push_back(0);
vector<int> unvisited;
for(int i = 1; i < n; i++) unvisited.push_back(i);
int cnt = 1;
while(cnt != n){
int min = 10000000;
int min_index = 0;
for(int i = 0; i < cnt; i++){
for(int j = 0; j < n - cnt; j++){
if(graph[visited[i]][unvisited[j]] > 0 && min > graph[visited[i]][unvisited[j]]){
min = graph[visited[i]][unvisited[j]];
min_index = j;
}
}
}
cnt++;
visited.push_back(unvisited[min_index]);
unvisited.erase(unvisited.begin() + min_index);
answer += min;
}
return answer;
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][스택/큐][C++] 주식가격 (0) | 2020.10.21 |
---|---|
[프로그래머스][Summer/Winter Coding(~2018)][C++] 스킬트리 (0) | 2020.10.19 |
[프로그래머스][DFS/BFS][C++] 타겟 넘버 (0) | 2020.09.24 |
[프로그래머스][2019 KAKAO BLIND][C++] 길 찾기 게임 (0) | 2020.09.23 |
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 풍선 터트리기 (0) | 2020.09.22 |
Comments