๐ค๋ฌธ์ ์ดํด
๋๋ผ๋ฅผ ์ธ์ด ์ฌ๋์ด 1 ์์กฑ์ด๊ณ , ์์กฑ์ด ์๋ ์ธ๋ถ ์ฌ๋์ 0์์กฑ์ด๋ค.
๋ถ๋ชจ์ ์์กฑ ์ ์๋ฅผ ๊ฐ๊ฐ 2๋ก ๋๋์ด ๋ํ ๊ฐ์ด ์์์ ์์กฑ ์ ์๊ฐ ๋๊ณ , ์์๋ฅผ ๊ณ์น๋ฐ๊ธฐ๋ฅผ ์ฃผ์ฅํ๋ ์ฌ๋๋ค ์ค ์์กฑ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ฌ๋์ ์ถ๋ ฅํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
์์ ์ ๋ ฅ
9 2
edwardi
charlesi edwardi diana
philip charlesi mistress
wilhelm mary philip
matthew wilhelm helen
edwardii charlesi laura
alice laura charlesi
helen alice bernard
henrii edwardii roxane
charlesii elizabeth henrii
charlesii
matthew
์์ ์ ๋ ฅ1์ ๋ฐํ์ผ๋ก ์ง ๊ฐ๊ณ๋์ด๋ค. helen๊ณผ wilhelm์ ์์ matthew์ ๊ด๊ณ๊ฐ ์ ๋ ฅ์์ ๋จผ์ ๋์ค์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก helen ๋ํ ์์กฑ์ด ๋๋ฏ๋ก ์ ๋ ฅ ์ค๊ฐ์ ๊ณ์ฐ์ ๋ถ๊ฐ๋ฅํด ๋ณด์๋ค.
๊ทธ๋์ ์ผ๋จ ์์ ์ด๋ฆ์ key๋ก ํ๊ณ ๋ถ๋ชจ ์ด๋ฆ๊ณผ ์์กฑ ์ ์๋ฅผ value๋ก ๊ฐ๋ map ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด
์์-๋ถ๋ชจ ๊ด๊ณ๋ฅผ ์ ์ฅํด๋๊ณ ํ์ฌ ์์์ ๋ํด ๊ทธ ๋ถ๋ชจ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๋๋์ด ์๊ฐํด๋ณด์๋ค.
1. ๋ถ๋ชจ ํ์ชฝ๋ง ์์กฑ
1-1. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ(0์ด ์๋ ๊ฒฝ์ฐ)
1-2. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ (0์ธ ๊ฒฝ์ฐ)
2. ๋ถ๋ชจ ์์ชฝ ๋ค ์์กฑ
2-1. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ๋๋ค ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-2. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์ผ์ชฝ ๋ถ๋ชจ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-3. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์ค๋ฅธ์ชฝ ๋ถ๋ชจ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-4. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ๋๋ค ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ์๋ ค์ฃผ๋ ์ ๋ ฅ๊ฐ๋ค์ ๋ฐ๋ก ๋ฐฐ์ด์ ์ ์ฅํด๋๊ณ ์ฒซ ์ ๋ ฅ์ ๋๋ผ๋ฅผ ์ธ์ด ์๊ณผ ๊ทธ์ ๋ฐฐ์ฐ์, ๊ทธ์ ์์ ๊ด๊ณ์ด๋ฏ๋ก ๊ฐ์ฅ ์ฒ์ ์ ๋ ฅ๊ฐ๋ถํฐ ์์์ ์์กฑ ์ ์๋ฅผ ์ฐพ์์คฌ๋ค.
while๋ฌธ ์์์ ๋ชจ๋ ์ ๋ ฅ๊ฐ๋งํผ for๋ฌธ์ ๋๋ฉด์ ๊ทธ ๋ถ๋ชจ๊ฐ ์์กฑ์ธ๋ฐ ์์กฑ ์ ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๊ทธ๋ฅ passํด์ฃผ๊ณ , ์กด์ฌํ๋ค๋ฉด ์ ์๋ฅผ ์ฑ์์ฃผ์๋ค.
์ ํด์ค์ผ ํ๋ ์์๋งํผ ๊ณ์ฐ์ ํด์ฃผ์๋ค๋ฉด while๋ฌธ์ ๋น ์ ธ๋์ค๊ฒ ํ๋ค.
๋ง์ง๋ง m๋งํผ ์ ๋ ฅ๋ฐ์ ๊ท์กฑ์ ์์กฑ ์ ์๋ฅผ map์์ ์ฐพ์ ๋น๊ตํด๊ฐ๋ฉด์ ์ต๋๊ฐ์ ๊ฐ๋ ๊ท์กฑ์ ์ด๋ฆ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋!
โ์ฒซ๋ฒ์งธ ์ ์ถ
์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ์์งํ ์ฒ์๋ถํฐ ์ฌ๊ทํจ์๋ฅผ ์ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋๋ฐ n๊ณผ m์ ์ต๋๊ฐ 50์ด๊ธธ๋ ๊ตณ์ด ์ฐ์ง ์์๋ ๋ ์ค ์์๋๋ฐ...
๐ก๋๋ฒ์งธ ์์ด๋์ด
๋ง์ฝ ๋ถ๋ชจ๊ฐ ํ๋ ๋๋ ๋์ด ์์กฑ์ผ ๋ ๊ทธ ๋ถ๋ชจ์ ์์กฑ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ sovleํจ์๋ฅผ ์ฌ๊ทํธ์ถํ์ฌ ๊ทธ ๋ถ๋ชจ๋ฅผ ์์ ์ทจ๊ธํ์ฌ ์์กฑ ์ ์๋ฅผ ์ฐพ์์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ์๋ค.
๐ฅํ์ด๐ฅ
์์์ ์์กฑ ์ ์๊ฐ 0์ผ ๋ ์๋์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์กฑ ์ ์๋ฅผ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ค.
1. ๋ถ๋ชจ ํ์ชฝ๋ง ์์กฑ
1-1. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ(0์ด ์๋ ๊ฒฝ์ฐ)
1-2. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ (0์ธ ๊ฒฝ์ฐ)
2. ๋ถ๋ชจ ์์ชฝ ๋ค ์์กฑ
2-1. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ๋๋ค ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-2. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์ผ์ชฝ ๋ถ๋ชจ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-3. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ์ค๋ฅธ์ชฝ ๋ถ๋ชจ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ
2-4. ๊ทธ ์์กฑ์ ์์กฑ ์ ์๊ฐ ๋๋ค ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
1-1๊ณผ 2-1์ ๊ฒฝ์ฐ์
๋ถ๋ชจ์ ์์กฑ ์ ์๋ฅผ ๊ฐ๊ฐ /2ํด์ ๋ํด์ค๋ค.
1-2, 2-2, 2-3, 2-4์ ๊ฒฝ์ฐ์
๋ถ๋ชจ์ ์์กฑ ์ ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ถ๋ชจ๋ฅผ ์์์ทจ๊ธํ์ฌ ์์กฑ์ ์๋ฅผ ์ฐพ๋ ํจ์๋ฅผ ์ฌ๊ทํธ์ถํด์ฃผ๊ณ ,
์ฌ๊ทํธ์ถ๋ก ์ธํด ์ ํด์ง ๋ถ๋ชจ์ ์์กฑ ์ ์๋ก ์์์ ์์กฑ ์ ์๋ฅผ ๊ณ์ฐํด์ค๋ค.
์์์ ์์กฑ ์ ์๊ฐ ์ ํด์ง๋ฉด return
๋ง์ง๋ง์ผ๋ก ์์ ๊ณ์น์ ์ฃผ์ฅํ๋ ๊ท์กฑ๋ค์ ์์กฑ ์ ์๋ฅผ ๋น๊ตํด ๊ฐ์ฅ ํฐ ์์กฑ ์ ์๋ฅผ ๊ฐ์ง ๊ท์กฑ์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ค.
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
int n, m;
string first_king;
string input[51][3];
map<string, pair<pair<string, string>, double>> family;
void solve(string child, string par_left, string par_right) {
if (family[child].second == 0) {
if (family.count(par_left) && family.count(par_right)) {
double left_num = family[par_left].second;
double right_num = family[par_right].second;
if (left_num != 0 && right_num != 0) {
family[child] = {{par_left, par_right}, left_num / 2 + right_num / 2};
} else if (left_num != 0 && right_num == 0) {
solve(par_left, family[par_left].first.first, family[par_left].first.second);
right_num = family[par_left].second;
family[child] = {{par_left, par_right}, left_num / 2 + right_num / 2};
} else if (left_num == 0 && right_num != 0) {
solve(par_right, family[par_right].first.first, family[par_right].first.second);
left_num = family[par_right].second;
family[child] = {{par_left, par_right}, left_num / 2 + right_num / 2};
} else {
solve(par_left, family[par_left].first.first, family[par_left].first.second);
right_num = family[par_left].second;
solve(par_right, family[par_right].first.first, family[par_right].first.second);
left_num = family[par_right].second;
family[child] = {{par_left, par_right}, left_num / 2 + right_num / 2};
}
} else if (family.count(par_left) && !family.count(par_right)) {
double left_num = family[par_left].second;
if (left_num != 0) {
family[child] = {{par_left, par_right}, left_num / 2};
} else {
solve(par_left, family[par_left].first.first, family[par_left].first.second);
left_num = family[par_left].second;
family[child] = {{par_left, par_right}, left_num / 2};
}
} else if (!family.count(par_left) && family.count(par_right)) {
double right_num = family[par_right].second;
if (right_num != 0) {
family[child] = {{par_left, par_right}, right_num / 2};
} else {
solve(par_right, family[par_right].first.first, family[par_right].first.second);
right_num = family[par_left].second;
family[child] = {{par_left, par_right}, right_num / 2};
}
}
return;
}
}
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
cin >> first_king;
family.insert({first_king, {{"", ""}, 1}});
string a, b, c;
for (int i = 0; i < n; i++) {
cin >> a >> b >> c;
family.insert({a, {{b, c}, 0}});
input[i][0] = a;
input[i][1] = b;
input[i][2] = c;
}
for (int i = 0; i < n; i++) {
string child = input[i][0];
string par_left = input[i][1];
string par_right = input[i][2];
if (family[child].second == 0) {
solve(child, par_left, par_right);
}
}
string s;
double large = 0;
string large_man = "";
for (int i = 0; i < m; i++) {
cin >> s;
if (large < family[s].second) {
large_man = s;
large = family[s].second;
}
}
cout << large_man;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 11054๋ฒ ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |
---|---|
[๋ฐฑ์ค/C++] 11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 11057๋ฒ ์ค๋ฅด๋ง ์ (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 1939๋ฒ ์ค๋์ ํ (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 14716๋ฒ ํ์๋ง (0) | 2022.07.16 |