diff --git "a/ise-yen/BOJ/Hash/\353\271\204\353\260\200\353\262\210\355\230\270 \354\260\276\352\270\260.cpp" "b/ise-yen/BOJ/Hash/\353\271\204\353\260\200\353\262\210\355\230\270 \354\260\276\352\270\260.cpp" new file mode 100644 index 000000000..dbf58b058 --- /dev/null +++ "b/ise-yen/BOJ/Hash/\353\271\204\353\260\200\353\262\210\355\230\270 \354\260\276\352\270\260.cpp" @@ -0,0 +1,23 @@ +#include +#include + +using namespace std; + +int main() { + cin.tie(0); + ios::sync_with_stdio(0); + int N{}, M{}; + cin >> N >> M; + unordered_map um; + for (int i = 0; i < N; i++) { + string site{}, pswr{}; + cin >> site >> pswr; + um.insert({ site, pswr }); + } + for (int i = 0; i < M; i++) { + string site{}; + cin >> site; + cout << um[site] << "\n"; + } + return 0; +} diff --git "a/ise-yen/BOJ/Kruskal/\353\204\244\355\212\270\354\233\214\355\201\254 \354\227\260\352\262\260.cpp" "b/ise-yen/BOJ/Kruskal/\353\204\244\355\212\270\354\233\214\355\201\254 \354\227\260\352\262\260.cpp" new file mode 100644 index 000000000..2c12414fa --- /dev/null +++ "b/ise-yen/BOJ/Kruskal/\353\204\244\355\212\270\354\233\214\355\201\254 \354\227\260\352\262\260.cpp" @@ -0,0 +1,53 @@ +#include +#include +#include + +using namespace std; + +int result{}, N{}, M{}; +int memo[100001]; + +int Find(int n) { + if (memo[n] == n) return n; + else return memo[n] = Find(memo[n]); +} + +void Union(int a, int b, int c) { + a = Find(a); + b = Find(b); + if (a != b) result += c; + if (a < b) memo[b] = a; + else memo[a] = b; +} + +int main() { + cin.tie(); + ios::sync_with_stdio(false); + + cin >> N >> M; + vector>> v; // c, a , b; + + // 초기화 + for (int i = 1; i <= N; i++) { + memo[i] = i; + } + + // 입력 + for (int i = 0; i < M; i++) { + int a{}, b{}, c{}; + cin >> a >> b >> c; + v.push_back({ c, {a, b} }); + } + + sort(v.begin(), v.end()); + + for (int i = 0; i < v.size(); i++) { + int c = v[i].first; + int a = v[i].second.first; + int b = v[i].second.second; + Union(a, b, c); + } + + cout << result; + return 0; +} diff --git "a/ise-yen/BOJ/Kruskal/\353\217\204\354\213\234 \352\261\264\354\204\244.cpp" "b/ise-yen/BOJ/Kruskal/\353\217\204\354\213\234 \352\261\264\354\204\244.cpp" new file mode 100644 index 000000000..88f9193b3 --- /dev/null +++ "b/ise-yen/BOJ/Kruskal/\353\217\204\354\213\234 \352\261\264\354\204\244.cpp" @@ -0,0 +1,67 @@ +#include +#include +#include + +using namespace std; + +const int MAX = 100001; +int N{}, M{}; +long long cost{}; +int memo[MAX]{}; + +int Find(int n) { + if (n == memo[n]) return n; + else return memo[n] = Find(memo[n]); +} + +void Union(int a, int b, int c) { + a = Find(a); + b = Find(b); + + if (a != b) cost += c; + if (a < b) memo[b] = a; + else memo[a] = b; +} + + + +int main() { + cin.tie(0); + ios::sync_with_stdio(false); + + cin >> N >> M; + for (int i = 1; i <= N; i++) { + memo[i] = i; + } + + long long sum{}; + vector>> v; + + for (int i = 0; i < M; i++) { + int a{}, b{}, c{}; + cin >> a >> b >> c; + sum += c; + v.push_back({ c, {a, b} }); + } + + sort(v.begin(), v.end()); + + for (int i = 0; i < v.size(); i++) { + int c = v[i].first; + int a = v[i].second.first; + int b = v[i].second.second; + Union(a, b, c); + } + + bool isSame = true; + for (int i = 1; i < N; i++) { + if (Find(i) != Find(i + 1)) { + isSame = false; + break; + } + } + if (isSame) cout << sum - cost; + else cout << -1; + + return 0; +} diff --git "a/ise-yen/BOJ/Kruskal/\354\265\234\354\206\214 \354\212\244\355\214\250\353\213\235 \355\212\270\353\246\254.cpp" "b/ise-yen/BOJ/Kruskal/\354\265\234\354\206\214 \354\212\244\355\214\250\353\213\235 \355\212\270\353\246\254.cpp" new file mode 100644 index 000000000..4b7d3157e --- /dev/null +++ "b/ise-yen/BOJ/Kruskal/\354\265\234\354\206\214 \354\212\244\355\214\250\353\213\235 \355\212\270\353\246\254.cpp" @@ -0,0 +1,69 @@ +#include +#include +#include + +using namespace std; + +const int MAX = 100001; +int N{}, M{}; +int memo[MAX]; + +vector < pair>> edges; +int result; + +// 집합 찾기 +int Find(int v) { + if (v == memo[v]) return v; + else return memo[v] = Find(memo[v]); +} + +// 집합 만들기 +void UnionV(int a, int b, int c) { + a = Find(a); + b = Find(b); + if (a != b) result += c; + if (a < b) memo[b] = a; + else memo[a] = b; +} + +// 초기화 +void Initial() { + // 메모이제이션용 메모를 자기 자신으로 초기화 + for (int i = 1; i <= N; i++) { + memo[i] = i; + } +} + +// 간선 정보 입력 +void Input() { + for (int i = 0; i < M; i++) { + int a{}, b{}, c{}; + cin >> a >> b >> c; + edges.push_back({ c, {a, b} }); + } +} + +// 크루스칼 알고리즘 +void Kruskal() { + // 정렬 + sort(edges.begin(), edges.end()); + + for (int i = 0; i < edges.size(); i++) { + int c = edges[i].first; + int a = edges[i].second.first; + int b = edges[i].second.second; + // 집합화 + UnionV(a, b, c); + } +} + +int main() { + cin.tie(); + ios::sync_with_stdio(false); + cin >> N >> M; + Initial(); + Input(); + Kruskal(); + cout << result; + return 0; +} diff --git "a/ise-yen/BOJ/Kruskal/\355\226\211\354\204\261 \354\227\260\352\262\260.cpp" "b/ise-yen/BOJ/Kruskal/\355\226\211\354\204\261 \354\227\260\352\262\260.cpp" new file mode 100644 index 000000000..54f1ed9ba --- /dev/null +++ "b/ise-yen/BOJ/Kruskal/\355\226\211\354\204\261 \354\227\260\352\262\260.cpp" @@ -0,0 +1,59 @@ +#include +#include +#include + +using namespace std; + +const int MAX = 1001; +int memo[MAX]; +unsigned long long result{}; + +int Find(int n) { + if (memo[n] == n) return n; + else return memo[n] = Find(memo[n]); +} + +void Union(int a, int b, int c) { + a = Find(a); + b = Find(b); + if (a != b) result += c; + if (a < b) memo[b] = a; + else memo[a] = b; +} + +int main() { + cin.tie(); + ios::sync_with_stdio(false); + + int N{}; + cin >> N; + for (int i = 1; i <= N; i++) { + memo[i] = i; + } + vector tmp(N + 1); + vector> map(N + 1, tmp); + + vector>> v; + + for (int i = 1; i <= N; i++) { + for (int j = 1; j <= N; j++) { + cin >> map[i][j]; + if (j > i) { + v.push_back({map[i][j], {i, j}}); + } + } + } + + sort(v.begin(), v.end()); + + for (int i = 0; i < v.size(); i++) { + int c = v[i].first; + int a = v[i].second.first; + int b = v[i].second.second; + Union(a, b, c); + } + + cout << result; + + return 0; +}