์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
2์ด | 128MB | 25.526% |
๋ฌธ์
ํธ๋ฆฌ์์ ๋ฆฌํ ๋
ธ๋๋, ์์์ ๊ฐ์๊ฐ 0์ธ ๋
ธ๋๋ฅผ ๋งํ๋ค.
ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ก์ ๋, ๋
ธ๋ ์ค ํ๋๋ฅผ ์ ๊ฑฐํ ๊ฒ์ด๋ค. ๊ทธ ๋, ๋จ์ ํธ๋ฆฌ์์ ๋ฆฌํ ๋
ธ๋์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ฒซ์งธ ์ค์ ํธ๋ฆฌ์ ๋ ธ๋์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค์๋ 0๋ฒ ๋ ธ๋๋ถํฐ N-1๋ฒ ๋ ธ๋๊น์ง, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ ๋ถ๋ชจ๊ฐ ์๋ค๋ฉด (๋ฃจํธ) -1์ด ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค์๋ ์ง์ธ ๋ ธ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
์ฒซ์งธ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ํธ๋ฆฌ์์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ธ๋๋ฅผ ์ง์ ์ ๋, ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํด๊ฒฐ
key point, ๋ฃจํธ๋ ธ๋๊ฐ 0์ด ์๋ ์๋ ์๋ค.
๊ณ์ ์ด์ํ๊ฒ ํ๋ฆฌ๊ธธ๋ ์ง๋ฌธ ๊ฒ์์์ ๋ฐ๋ก๋ฅผ ์ฐพ์๋ดค๋๋ฐ ์ ๋ง ๊ฟ๊ฐ์ ๋ฐ๋ก๋ฅผ ์ฐพ์๋ค.
Testcase
7
3 6 6 -1 0 6 3
4
์ถ๋ ฅ → 4
ํ ์คํธ์ผ์ด์ค๋ฅผ ๋์ํํ๋ฉด ์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋๋ค. ์ด ์ฒ๋ผ '๋์งธ ์ค์๋ 0๋ฒ ๋ ธ๋๋ถํฐ N-1๋ฒ ๋ ธ๋๊น์ง, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๊ฐ ์ฃผ์ด์ง๋ค.'๋ผ๊ณ ๋ฌธ์ ์์ ์ฃผ์ด์ก์ง๋ง, ๋ฃจํธ๋ ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฃผ์ด์ง๋จ ๋ง์ ์์ผ๋ฏ๋ก -1์ด ์ ๋ ฅ์ ๋ ๋น๋ก์ ๋ฃจํธ๋ ธ๋๊ฐ ๋ช ๋ฒ์งธ ๋ ธ๋์ธ์ง ์ ์ ์๋ค.
๋ ์ ์ํ ์ ์,
๋ฃจํธ๋ ธ๋๊ฐ ์ญ์ ๋๋ฉด ๋ต์ 0์ด๊ณ ,
ํธํฅํธ๋ฆฌ์ผ ๋ ๋ฆฌํ๋ ธ๋ ๊ฐ์๋ฅผ ์ ์ธ๊ณ ์๋์ง ์๊ฐํด๋ด์ผ ํ๋ค.
์ฒ์์ ํ๋ ๋ฐฉ์์
๋
ธ๋๋ฅผ ์ญ์ ํ ๋ ๋
ธ๋ ์์ฒด๋ฅผ ์์ ๋ ๊ฒ์ด ์๋๋ผ ์๋ฏธ์ ์ง์คํ์ฌ chk[] ๋ฐฐ์ด์ 1์ ๋ฃ์ด์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ก ์ฒ๋ฆฌ๋ฅผ ํ๊ณ , ์๋กญ๊ฒ ๋ฃจํธ๋ถํฐ ์ํํ๋ฉฐ ํด๋น๋
ธ๋์ ์์์ด ์์ด์ผ์ง๋ง ๊ฐ์๋ฅผ ์
๋ค. → ์ธ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ 0์ผ ๋
๊ทธ๋์ ํธํฅํธ๋ฆฌ์ผ ๋ ๋ฆฌํ๋
ธ๋๋ฅผ ์ญ์ ํ๋ฉด, 1์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋๋ผ 0์ด ์ถ๋ ฅ๋์๋ค.
์ด ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด์ DFSํจ์ ๋ด์ cnt๋ผ๋ ์ง์ญ๋ณ์๋ฅผ ๋์ด์ 0์ผ๋ก ์ด๊ธฐํํด๋ ํ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ธ์ด์ ๋ง์ง๋ง๊น์ง 0์ด๋ผ๋ฉด ๋ฆฌํ๋ ธ๋๋ผ๊ณ ํ๋จํ๋ค.
์ ๋ฆฌํ์๋ฉด
- DFS
- -1์ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ ๋ ๋ฃจํธ๋ ธ๋๊ฐ ์ ํด์ง๋ค.
- ๋ ธ๋์ญ์ ๋ ๋ฌผ๋ฆฌ์ ์ธ ์ญ์ ๊ฐ ์๋๋ผ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ก ์ฒดํฌํ๋ค.
- ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฆฌํ๋ ธ๋ ํ์์ ํ ๋ root๋ถํฐ ์์ํ๋ค.
- cnt๊ฐ 0์ผ๋ก ์ ์ง๋ ๋๋ง ๋ฆฌํ๋ ธ๋๋ก ํ๋จํ์ฌ ans๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
๋ชจ๋ ๋ ธ๋์ ๋ํ ํ์์ ๋ง์น ๋ค ans์ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด๋ค.
flg๋ณ์์ ์๋ฏธ๋ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋ ans๋ณ์์ ๋ณํ๊ฐ ์์ผ๋ฉด ์๋๋ฏ๋ก ๋ ธ๋ ์ญ์ ํ flg๋ฅผ 1๋ก ๋ฐ๊พธ๊ณ DFS(root) ํ์์ ๋ค์ ์งํํ๋ค.
์ฝ๋
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
1984KB | 0ms |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int n, root, rm, chk[55], flg, ans;
vector<int> v[55];
void dfs(int num) {
chk[num] = 1;
int cnt = 0;
for (auto child : v[num]) {
if (chk[child]) continue;
chk[child] = 1;
cnt++;
dfs(child);
}
if (flg && cnt == 0) ans++;
}
int main() {
scanf("%d", &n);
for (int i = 0, a; i < n; i++) {
scanf("%d", &a);
if (a == -1) { root = i; continue; }
v[a].push_back(i);
}
scanf("%d", &rm);
dfs(rm);
flg = 1;
if (rm != root) dfs(root);
printf("%d", ans);
return 0;
}
|
cs |
ํ ์คํธ์ผ์ด์ค ์ฒจ๋ถ
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1748 ์ ์ด์ด ์ฐ๊ธฐ 1 (0) | 2020.04.23 |
---|---|
[BOJ] #1953 ํ๋ฐฐ๋ถ (0) | 2020.04.21 |
[BOJ] #2941 ํฌ๋ก์ํฐ์ ์ํ๋ฒณ (0) | 2020.04.16 |
[BOJ] #1021 ํ์ ํ๋ ํ (0) | 2020.01.11 |
[BOJ] #11052 ์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2020.01.10 |
๋๊ธ