본문 바로가기

problem solving

[프로그래머스]섬 연결하기

넘 어려웠다./....

#include <string>
#include <vector>
#include <algorithm>
#include <climits>
 
using namespace std;
 
int solution(int n, vector<vector<int>> costs) {
    int answer = 0;
 
    int min = INT_MAX;
    int y, x;
    vector<bool> check(n);
    vector<vector<int>> map(n, vector<int>(n));
    for(int idx = 0; idx < costs.size(); idx++) {
        map[costs[idx][0]][costs[idx][1]] = costs[idx][2];
        map[costs[idx][1]][costs[idx][0]] = costs[idx][2];
        if(min <= costs[idx][2]) { continue; }
        min = costs[idx][2];
        y = costs[idx][0], x = costs[idx][1];
    }
    check[y] = check[x] = true;
    answer += min;
 
    while(true) {
        min = INT_MAX;
        for(int i = 0; i < n; i++) {
            if(!check[i]) { continue; }
            for(int idx = 0; idx < n; idx++) {
                if(!map[i][idx] || map[i][idx] >= min || check[idx]) { continue; }
                min = map[i][idx];
                y = i, x = idx;
            }
        }
        check[y] = check[x] = true;
        answer += min;
 
        for(int idx = 0; idx < n; idx++) {
            if(!check[idx]) { break; }
            if(idx == n - 1) { return answer; }
        }
    }
 
    return answer;
}
cs

'problem solving' 카테고리의 다른 글

[LeetCode]#2 Add Two Numbers  (0) 2020.03.14
[프로그래머스]디스크 컨트롤러  (0) 2020.03.14
[프로그래머스]이중우선순위큐  (0) 2020.03.13
[미완]디스크 분할  (0) 2020.03.13
[프로그래머스]라면공장  (0) 2020.03.13