glowing713
Frontend-Deep-Dive
glowing713
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
    • Languages (11)
      • JavaScript ๐Ÿ’› (3)
      • Python ๐Ÿ (4)
      • Java โ˜•๏ธ (3)
      • Swift ๐Ÿงก (1)
    • Computer_Science (1)
      • Computer_Network ๐Ÿ•ธ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring ๐Ÿ€ (1)
    • AI (2)
      • NLP ๐Ÿ—ฃ (1)
      • AI_Math โž— (1)
    • ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊พธ๋ฏธ๊ธฐ โœŒ (1)
    • ์ƒ๊ฐ์ •๋ฆฌ โœ๐Ÿป (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ปGithub

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ps
  • 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ
  • ์นด์นด์˜ค ๊ธฐ์ถœ
  • Stack
  • Java
  • c++
  • Python
  • brute-force
  • ๋™์ ๊ณ„ํš๋ฒ•
  • BOJ
  • DP
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • bfs
  • ์™„์ „ํƒ์ƒ‰
  • boostcampaitech
  • binary search
  • Algorithm
  • Baekjoon
  • ์ด๋ถ„ํƒ์ƒ‰
  • mst

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
glowing713

Frontend-Deep-Dive

[BOJ] ๋ฐฑ์ค€ 2887 ํ–‰์„ฑ ํ„ฐ๋„ / ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST), ํฌ๋ฃจ์Šค์นผ
Problem_Solving

[BOJ] ๋ฐฑ์ค€ 2887 ํ–‰์„ฑ ํ„ฐ๋„ / ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST), ํฌ๋ฃจ์Šค์นผ

2020. 11. 21. 16:26

์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฌธ์ œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.


 

 

๐Ÿ’ฃ ๋ฌธ์ œ ์ดํ•ด

 

x, y, z ์ขŒํ‘œ๋กœ ํ–‰์„ฑ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ (๋…ธ๋“œ), ๊ทธ ํ–‰์„ฑ๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์ค‘์น˜๊ฐ€ ๋œ๋‹ค(๊ฐ„์„ ).

ํ–‰์„ฑ๊ณผ ํ–‰์„ฑ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ฒ˜๋Ÿผ min(abs(x1-x2), abs(y1-y2), abs(z1-z2))๊ฐ€ ๋œ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์ดํ–ˆ๋‹ค.

 

 

๐Ÿ’ญ ํ’€์ด ๊ณผ์ •

 

 

์ž‘์„ฑ ์–ธ์–ด: C++

 

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

class Planet {
public:
    int x, y, z, index;
    Planet(int x, int y, int z, int index) {
        this->x = x;
        this->y = y;
        this->z = z;
        this->index = index;
    }
};

class Tunnel {
public:
    int start, dest, cost;
    Tunnel(int start, int dest, int cost) {
        this->start = start;
        this->dest = dest;
        this->cost = cost;
    }
};

int planet_cnt = 0;
int result = 0;
const int MAX = 100001;
vector<Planet>planets;
vector<Tunnel>tunnels;
int parent[MAX] = {0, };

bool compare_x(const Planet &p1, const Planet &p2) {
    return p1.x < p2.x;
}

bool compare_y(const Planet &p1, const Planet &p2) {
    return p1.y < p2.y;
}

bool compare_z(const Planet &p1, const Planet &p2) {
    return p1.z < p2.z;
}

bool compare_cst(const Tunnel &t1, const Tunnel &t2) {
    return t1.cost < t2.cost;
}

int getCost(const Planet p1, const Planet p2) {
    int x_dist = abs(p1.x - p2.x);
    int y_dist = abs(p1.y - p2.y);
    int z_dist = abs(p1.z - p2.z);
    return min(x_dist, min(y_dist, z_dist));
}

int getParent(int node) {
    if (node == parent[node]) return node;
    return parent[node] = getParent(parent[node]);
}

void mergeTree(int node1, int node2) {
    int node1_p = getParent(node1);
    int node2_p = getParent(node2);
    
    parent[node1_p] = node2_p;
}


int main() {
    cin >> planet_cnt;
    for (int i = 0; i < planet_cnt; ++i) {
        int x, y, z;
        cin >> x >> y >> z;
        planets.push_back(Planet(x, y, z, i));
    }
    
    for (int i = 0; i < planet_cnt; ++i) {
        parent[i] = i;
    }
    
    sort(planets.begin(), planets.end(), compare_x);
    for (int i = 0; i < planet_cnt-1; ++i)
        tunnels.push_back(Tunnel(planets[i].index, planets[i+1].index, getCost(planets[i], planets[i+1])));
    sort(planets.begin(), planets.end(), compare_y);
    for (int i = 0; i < planet_cnt-1; ++i)
        tunnels.push_back(Tunnel(planets[i].index, planets[i+1].index, getCost(planets[i], planets[i+1])));
    sort(planets.begin(), planets.end(), compare_z);
    for (int i = 0; i < planet_cnt-1; ++i)
        tunnels.push_back(Tunnel(planets[i].index, planets[i+1].index, getCost(planets[i], planets[i+1])));
    
    sort(tunnels.begin(), tunnels.end(), compare_cst);
    for (int i = 0; i < tunnels.size(); ++i) {
        if (getParent(tunnels[i].start) != getParent(tunnels[i].dest)) {
            result += tunnels[i].cost;
            mergeTree(tunnels[i].start, tunnels[i].dest);
        }
    }
    
    cout << result << endl;
    
    return 0;
}

 

์ผ๋ฐ˜์ ์ธ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ํ–‰์„ฑ๊ณผ ํ–‰์„ฑ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ x์ถ•, y์ถ•, z ์ถ•์œผ๋กœ ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ํ–‰์„ฑ๋“ค๋ผ๋ฆฌ์˜ ๊ฒฝ๋กœ๋งŒ ์ €์žฅํ•˜๋ฉด ๋ฌธ์ œ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ๋ฐฑ์ค€ 2644 ์ดŒ์ˆ˜๊ณ„์‚ฐ / BFS, DFS  (0) 2021.01.05
[BOJ] ๋ฐฑ์ค€ 2667 ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ / BFS, DFS  (0) 2021.01.04
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ / ์ตœ๋‹จ ๊ฒฝ๋กœ, ๋‹ค์ต์ŠคํŠธ๋ผ  (0) 2020.11.21
[BOJ] ๋ฐฑ์ค€ 1647 ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš / ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST), ํฌ๋ฃจ์Šค์นผ  (0) 2020.11.20
[BOJ] ๋ฐฑ์ค€ 1922 ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ / ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST), ํฌ๋ฃจ์Šค์นผ  (0) 2020.11.19
    'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [BOJ] ๋ฐฑ์ค€ 2644 ์ดŒ์ˆ˜๊ณ„์‚ฐ / BFS, DFS
    • [BOJ] ๋ฐฑ์ค€ 2667 ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ / BFS, DFS
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ / ์ตœ๋‹จ ๊ฒฝ๋กœ, ๋‹ค์ต์ŠคํŠธ๋ผ
    • [BOJ] ๋ฐฑ์ค€ 1647 ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš / ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST), ํฌ๋ฃจ์Šค์นผ
    glowing713
    glowing713

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”