๋์ด๋ : ๊ณจ๋ 2
๋ฌธ์
์ด์ง ํ์ ํธ๋ฆฌ ๋ณต์ํ๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
1๋ถํฐ N๊น์ง์ ๋ชจ๋ ์ ์๋ฅผ ํ ๋ฒ์ฉ ํฌํจํ๊ณ ์๋ ์์ด A1, A2, ..., AN์ด ์๋ค.
๊ฐ์ด A1์ธ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ํ๋ ํธ๋ฆฌ์ A2, A3, ..., AN ์ ์์๋๋ก ์ฝ์ ํ๋ ค ํ๋ค.
N-1๊ฐ์ ๋ ธ๋๋ฅผ ์ฝ์ ํ ๋๋ง๋ค ๋ฃจํธ์์ ๊ทธ ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์, ์ฆ ๋ ธ๋์ ๊น์ด๊ฐ ์ฃผ์ด์ง ๋ A1, A2, ..., AN์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ์ด
- ๊ฐ ๋ฐ์ผ๋ฉด์ 2N(n-1)<N(n) ์ธ์ง ์ฒดํฌ
- N(x) : x level์ ๋ ธ๋ ์
- ๋ง์ผ๋ฉด ํธ๋ฆฌ ์์ฑ ๋ถ๊ฐ์ด๋ฏ๋ก -1 ๋ฐํ
- ์ผ์ชฝ ํฌํ ์ด์ง ํธ๋ฆฌ ์์ฑ (index ์ด์ฉ)
- ์ค์์ํํ๋ฉด์ result[index]์ value ์ ์ฅ
- result ์์๋๋ก ์ถ๋ ฅ
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
struct Node {
int index;
vector<Node*> children;
Node(int idx) {
index = idx;
}
};
vector<vector<Node*>> tree(300001, vector<Node*>());
int result[300001];
int idx = 1;
void Inorder(Node* head) {
if (head->children.size() > 0) {
// ์ผ์ชฝ ์์ ์กด์ฌ
Inorder(head->children[0]);
}
result[head->index] = idx++;
if (head->children.size() > 1) {
// ์ค๋ฅธ์ชฝ ์์ ์กด์ฌ
Inorder(head->children[1]);
}
}
int main() {
// ๋
ธ๋์ ๊น์ด(depth)๋ 2^depth๊ฐ ๋งํผ๋ง ๋์ฌ ์ ์๋ค
// 1. ๊ฐ ๋ฐ์ผ๋ฉด์ 2N(n-1)<N(n) ์ธ์ง ์ฒดํฌ => ๋ง์ผ๋ฉด ํธ๋ฆฌ ์์ฑ ๋ถ๊ฐ -1
// 2. ์ผ์ชฝ ํฌํ ์ด์ง ํธ๋ฆฌ ์์ฑ (index ์ด์ฉ, value ๋น ๊ฐ)
// 3. ์ค์์ํ๋ก value ์ฑ์ฐ๊ธฐ => ์ฑ์ฐ๋ฉด์ result[index]์ value ์ ์ฅ
// 4. result ์์๋๋ก ์ถ๋ ฅ
int N; cin >> N;
int index = 0;
Node* head = new Node(++index);
tree[0].push_back(head);
for (int i = 0; i < N - 1; i++) {
int level; cin >> level;
Node* tmp = new Node(++index);
int insertIdx = tree[level].size();
if (tree[level - 1].size() < (insertIdx / 2) + 1) {
cout << -1;
return 0; // ์ ์ ์ข
๋ฃ
}
tree[level].push_back(tmp);
tree[level - 1][insertIdx/2]->children.push_back(tmp);
}
Inorder(head);
for (int i = 1; i <= N; i++) {
cout << result[i] << " ";
}
}
๊ฐ์
์ฝ๋๊ฐ ๊ธธ๋ค๊ธธ์ด..
๊ฒฐ๊ณผ
์์ด๋ | ๋ฉ๋ชจ๋ฆฌ | ์๊ฐ | ์ฝ๋ ๊ธธ์ด |
---|---|---|---|
gmldms784 | 52212 | 248 | 1423 |
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 17244 :: ์๋ง๋ค์ฐ์ฐ (0) | 2021.08.02 |
---|---|
[c++] BOJ 12888 :: ์์ ์ด์ง ํธ๋ฆฌ ๋๋ก ๋คํธ์ํฌ (0) | 2021.07.20 |
[c++] BOJ 19535 :: ใทใทใทใ (0) | 2021.07.11 |
[c++] BOJ 3584 :: ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์ (0) | 2021.07.03 |
[c++] BOJ 5052 :: ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2021.07.03 |
Comment